日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编-5

發(fā)布時(shí)間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编-5 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
檢測位指令TEST


檢測位指令是把二個(gè)操作數(shù)進(jìn)行邏輯“與”操作,并根據(jù)運(yùn)算結(jié)果設(shè)置相應(yīng)的標(biāo)志位,但并不保存該運(yùn)算結(jié)果,所以,不會(huì)改變指令中的操作數(shù)。在該指令后,通常用JE、JNE、JZ和JNZ等條件轉(zhuǎn)移指令。


指令的格式:TEST ?Reg/Mem, Reg/Mem/Imm


受影響的標(biāo)志位:CF(0)、OF(0)、PF、SF和ZF(AF無定義)


call XXXXXXXX
test al,al/eax,eax...
je/jne...
**************************************************************************************************
循環(huán)指令本身的執(zhí)行不影響任何標(biāo)志位。


1、循環(huán)指令


循環(huán)指令LOOP的一般格式:


LOOP 標(biāo)號(hào)
LOOPW 標(biāo)號(hào)      ;CX作為循環(huán)計(jì)數(shù)器
LOOPD 標(biāo)號(hào)      ;ECX作為循環(huán)計(jì)數(shù)器


....
....
inc eax
dex ebx
cmp eax,ebx
jne/je XXXX ^


?
求1+2+…+1000之和,并把結(jié)果存入AX中。


?
方法1:因?yàn)橛?jì)數(shù)器CX只能遞減,所以,可把求和式子改變?yōu)?#xff1a;1000+999+…+2+1。?
?…?
? ? ? ?XOR AX, AX?
? ? ? ?MOV CX, 1000D?
again: ADD AX, CX ;計(jì)算過程:1000+999+…+2+1
? ? ? ?DEC CX?
? ? ? ?LOOP again?
…?
方法2:不用循環(huán)計(jì)數(shù)器進(jìn)行累加,求和式子仍為:1+2+…+999+1000。?
?…?
? ? ? ?XOR AX, AX?
? ? ? ?MOV CX, 1000D?
? ? ? ?MOV BX, 1?
again: ADD AX, BX ;計(jì)算過程:1+2+…+999+1000?
? ? ? ?INC BX?
? ? ? ?LOOP again?
…?
從程序段的效果來看:方法1要比方法2好。為什么?^_^
**************************************************************************************************
轉(zhuǎn)移指令
轉(zhuǎn)移指令是匯編語言程序員經(jīng)常使用的一組指令。在高級(jí)語言中,時(shí)常有“盡量不要使用轉(zhuǎn)移語句”的勸告,但如果在匯編語言的程序中也盡量不用轉(zhuǎn)移語句,那么該程序要么無法編寫,要么沒有多少功能,所以,在匯編語言中,不但要使用轉(zhuǎn)移指令,而且還要靈活運(yùn)用,因?yàn)橹噶钕到y(tǒng)中有大量的轉(zhuǎn)移指令。


轉(zhuǎn)移指令分無條件轉(zhuǎn)移指令和有條件轉(zhuǎn)移指令兩大類。


1、無條件轉(zhuǎn)移指令


無條件轉(zhuǎn)移指令包括:JMP、子程序的調(diào)用和返回指令、中斷的調(diào)用和返回指令等。


下面只介紹無條件轉(zhuǎn)移指令JMP


JMP指令的一般形式:


JMP ?標(biāo)號(hào)/Reg/Mem




2、條件轉(zhuǎn)移指令


條件轉(zhuǎn)移指令是一組極其重要的轉(zhuǎn)移指令,它根據(jù)標(biāo)志寄存器中的一個(gè)(或多個(gè))標(biāo)志位來決定是否需要轉(zhuǎn)移,這就為實(shí)現(xiàn)多功能程序提供了必要的手段。微機(jī)的指令系統(tǒng)提供了豐富的條件轉(zhuǎn)移指令來滿足各種不同的轉(zhuǎn)移需要,在編程序時(shí),要對(duì)它們靈活運(yùn)用。


條件轉(zhuǎn)移指令又分三大類:基于無符號(hào)數(shù)的條件轉(zhuǎn)移指令、基于有符號(hào)數(shù)的條件轉(zhuǎn)移指令和基于特殊算術(shù)標(biāo)志位的條件轉(zhuǎn)移指令。


、無符號(hào)數(shù)的條件轉(zhuǎn)移指令


指令的助憶符


JE/JZ
ZF=1 Jump Equal or Jump Zero?


JNE/JNZ
ZF=0 Jump Not Equal or Jump Not Zero?


JA/JNBE
CF=0 and ZF=0 Jump Above or Jump Not Below or Equal
?
JAE/JNB
CF=0 Jump Above or Equal or Jump Not Below?


JB/JNAE
CF=1 Jump Below or Jump Not Above or Equal
?
JBE/JNA
CF=1 or AF=1 Jump Below or Equal or Jump Not Above?


、有符號(hào)數(shù)的條件轉(zhuǎn)移指令


指令的助憶符


JE/JZ
ZF=1 Jump Equal or Jump Zero?


JNE/JNZ
ZF=0 Jump Not Equal or Jump Not Zero?


JG/JNLE
ZF=0 and SF=OF Jump Greater or Jump Not Less or Equal?


JGE/JNL
SF=OF Jump Greater or Equal or Jump Not Less?


JL/JNGE
SF≠OF Jump Less or Jump Not Greater or Equal?


JLE/JNG
ZF=1 or SF≠OF Jump Less or Equal or Jump Not Greater?


、特殊算術(shù)標(biāo)志位的條件轉(zhuǎn)移指令


指令的助憶符
?檢測的轉(zhuǎn)移條件 功能描述?
JC
CF=1 Jump Carry?


JNC
CF=0 Jump Not Carry
?
JO
OF=1 Jump Overflow
?
JNO
OF=0 Jump Not Overflow
?
JP/JPE
PF=1 Jump Parity or Jump Parity Even
?
JNP/JPO
PF=0 Jump Not Parity or Jump Parity Odd?


JS
SF=1 Jump Sign (negative)
?
JNS
SF=0 Jump No Sign (positive)?


例,已知一個(gè)字節(jié)變量char,試編寫一程序段,把其所存的大寫字母變成小寫字母。


解:?
next: …?
char DB ?'F' ? ;變量說明?
…?
MOV AL, char?
CMP AL, 'A'?
JB next ? ? ? ?;注意:字符是無符號(hào)數(shù),不要使用指令JL?
CMP AL, 'Z'?
JA next?
ADD char, 20

總結(jié)

以上是生活随笔為你收集整理的汇编-5的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。