內(nèi)存尋址方式
?? mov ax驰吓,[bx]
ax=[ds*10H+bx]
loop
?循環(huán)指令,循環(huán)次數(shù)由計(jì)數(shù)寄存器CX指定。是否執(zhí)行循環(huán)體的判斷指令在循環(huán)體之后辆布,所以,至少執(zhí)行1次循環(huán)體茶鉴,即至少循環(huán)1次锋玲。執(zhí)行LOOP指令時(shí),CPU自動(dòng)將CX的值減1涵叮,若CX=0惭蹂,則結(jié)束循環(huán);否則割粮,重復(fù)執(zhí)行循環(huán)體盾碗。
loop指令等價(jià)于C的do…while結(jié)構(gòu):
? cx =
循環(huán)次數(shù);
? do {
? //
循環(huán)體
? cx--;
? } while (cx);
結(jié)構(gòu):
1????? start: mov ax, 2
?2?????????????mov cx, 11
?3????? s: addax, ax
?4?????????????loop s
and , or 指令
and 與??? &
or? 或???? |
xor? 異或? ^
not? 非??? ~
內(nèi)存尋址方式
BP:基數(shù)指針寄存器????? 和堆棧指針SP聯(lián)合使用舀瓢,作為SP的校準(zhǔn)
(1)在8086CPU中只有這四個(gè)寄存器可以在[...]中進(jìn)行內(nèi)存單元的尋址廷雅。
比如,下面的指令都是正確的:
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bp+di]
而下面都是錯(cuò)誤的:
mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]
(2).在[...]中,這四個(gè)寄存器可以單獨(dú)出現(xiàn)榜轿,或者只能以四種組合出現(xiàn):bx和si幽歼、bx和di、bp和si谬盐、bp和di甸私。
比如下面都是正確的
mov ax,[bx]
mov ax,[si]
mov ax,[di]
mov ax,[bp]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp+si]
mpv ax,[bp+di]
mov ax,[bx+si+idata]
mov ax,[bx+si+idata]
mov ax,[bp+si+idata]
mov ax,[bp+di+idata]
下面就是錯(cuò)誤的
mov ax,[bx+bp]
mov ax,[si+di]
(3)只要在[....]中使用寄存器bp,而指令匯總沒(méi)有顯示給出段地址飞傀,段地址就默認(rèn)在ss中皇型。 比如下面的指令。
mov ax,[bp] 含義:(ax)=((ss)*16+(bp))
mov ax,[bp+idata] 含義:(ax)=((ss)*16+(bp)+idata)
mov ax,[bp+si] 含義:(ax)=((ss)*16+(bp)+(si))
mov ax,[bp+si+idata] 含義:(ax)=((ss)*16+(bp)+(si)+idata)
跳轉(zhuǎn)指令和指令跳轉(zhuǎn)原理
jmp指令
? ? ? ? ? ? jmp 地址? ? ? 跳轉(zhuǎn)到地址
call指令
ret指令
mul指令
MUL AB
乘法指令的功能是將A和B中兩個(gè)無(wú)符號(hào)8位二進(jìn)制數(shù)相乘砸烦,所得的16位積的低8位存于A中弃鸦,高8位存于B中。如果乘積大于256幢痘,即高位B不為0唬格,則OV置1;否則OV清0颜说,CY總是清0购岗。
例如:設(shè)(A)=50H(80),(B)=0A0H(160)
若執(zhí)行MUL AB门粪,
則執(zhí)行結(jié)果為:
乘積為3200H(12800)喊积,
(A)=00H,(B)=32H玄妈,(OV)=1,(CY)=0
div指令