8086匯編學(xué)習(xí)
代碼
移動(dòng)數(shù)據(jù)存儲(chǔ)位置
;問(wèn)題:利用變址寄存器,編寫(xiě)一段程序,
;把自1000H單元開(kāi)始的100個(gè)數(shù)傳送到自1070H開(kāi)始的存儲(chǔ)區(qū)(使用8086匯編語(yǔ)言)
; 假設(shè)數(shù)據(jù)已經(jīng)存儲(chǔ)在1000H到10FFH的內(nèi)存區(qū)域中
; 我們將使用SI作為源索引寄存器,DI作為目標(biāo)索引寄存器
; 計(jì)數(shù)器將使用CX寄存器,因?yàn)槲覀円獋魉?00個(gè)字節(jié)
MOV AX,1000H;設(shè)置源地址到SI
MOV SI,AX
MOV AX,1070H;設(shè)置目的地址到DI
MOV DI,AX
MOV CX,100;設(shè)置計(jì)數(shù)器為100,因?yàn)槲覀儌魉?00個(gè)字節(jié)
;開(kāi)始傳送循環(huán)
REP MOVSB;重復(fù)移動(dòng)字符串操作,SI指向源地址,DI指向目標(biāo)地址,CX為計(jì)數(shù)
;至此,數(shù)據(jù)已經(jīng)從1000H傳送到1070H
累加
; 假設(shè)從0500H開(kāi)始的10個(gè)無(wú)符號(hào)數(shù)已經(jīng)存儲(chǔ)在內(nèi)存中
; 結(jié)果的高位將存儲(chǔ)在050BH,低位存儲(chǔ)在050AH
ORG 100H;程序的起始地址,可以根據(jù)實(shí)際情況調(diào)整
START:
MOV CX,10 ;設(shè)置循環(huán)計(jì)數(shù)器為10
XOR AX,AX ;清除AX寄存器,用于累加和
MOV SI,0500H ; 設(shè)置源索引寄存器SI為數(shù)組的起始地址
SUM_LOOP:
ADD AL,[SI] ;將當(dāng)前內(nèi)存單元的值加到AL寄存器(無(wú)符號(hào)數(shù))
INC SI ;增加SI寄存器,指向下一個(gè)內(nèi)存單元
LOOP SUM_LOOP;循環(huán)到CX為0為止
;此時(shí)AX中存儲(chǔ)著10個(gè)無(wú)符號(hào)數(shù)的和
;將AX寄存器的高位和低位分別存儲(chǔ)到指定的內(nèi)存單元
MOV [050AH],AL ;存儲(chǔ)和的低位到050AH
MOV [050BH],AH ;存儲(chǔ)和的高位到050BH
;程序結(jié)束,可以在這里添加退出指令或者返回操作系統(tǒng)的代碼
HLT ;停止CPU直到下一個(gè)外部中斷
END START ;指示匯編器程序的結(jié)束
十進(jìn)制數(shù)字相加
; 8086匯編語(yǔ)言程序,用于計(jì)算兩個(gè)BCD碼數(shù)的和
; 假設(shè)第一個(gè)BCD碼數(shù)從0100H開(kāi)始,第二個(gè)BCD碼數(shù)從0110H開(kāi)始
; 結(jié)果將從0214H開(kāi)始存儲(chǔ) 每個(gè)BCD碼數(shù)長(zhǎng)度為10個(gè)字節(jié)
ORG 100H ; 程序起始地址
MOV SI, 0100H ; 第一個(gè)BCD碼數(shù)的起始地址
MOV DI, 0110H ; 第二個(gè)BCD碼數(shù)的起始地址
MOV BX, 0214H ; 結(jié)果存儲(chǔ)的起始地址
MOV CX, 10 ; 計(jì)數(shù)器,用于10個(gè)字節(jié)的循環(huán)
ADD_BCD_LOOP:
MOV AL, [SI] ; 加載第一個(gè)BCD碼數(shù)的當(dāng)前字節(jié)
MOV DL, [DI] ; 加載第二個(gè)BCD碼數(shù)的當(dāng)前字節(jié)
ADD AL, DL ; 將兩個(gè)BCD碼數(shù)的當(dāng)前字節(jié)相加
ADC AH, 0 ; 將AH寄存器加載為0,以保存AL相加可能產(chǎn)生的進(jìn)位
MOV [BX], AL ; 存儲(chǔ)相加結(jié)果的低字節(jié)
INC SI ; 移動(dòng)到第一個(gè)BCD碼數(shù)的下一個(gè)字節(jié)
INC DI ; 移動(dòng)到第二個(gè)BCD碼數(shù)的下一個(gè)字節(jié)
INC BX ; 移動(dòng)到結(jié)果存儲(chǔ)的下一個(gè)字節(jié)
LOOP ADD_BCD_LOOP ; 循環(huán),直到處理完10個(gè)字節(jié)
HLT ; 停止程序
END ; 程序結(jié)束
HELLO,WORLD
DATA SEGMENT
HELLO DB 'HELLO,WORLD!',0DH,0AH,'$'
DATA ENDS
PROG SEGMENT
ASSUME CS:PROG,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DX,HELLO ;取字符串首地址
MOV AH,9
INT 21H ;顯示字符
MOV AH,4CH
INT 21H ;退回DOS
PROG ENDS
END START
應(yīng)試學(xué)習(xí)
第一章:微機(jī)基礎(chǔ)
第四章:匯編程序設(shè)計(jì)
重點(diǎn)考點(diǎn):考點(diǎn)2、考點(diǎn)4

1.1匯編語(yǔ)言基本概念
1.匯編語(yǔ)言源程序格式
? 匯編語(yǔ)言源程序的結(jié)構(gòu)是分段結(jié)構(gòu)形式,一個(gè)匯編語(yǔ)言源程序是由若干個(gè)段組成的,每個(gè)段以SEGMENTS語(yǔ)句開(kāi)始,以ENDS結(jié)束,整個(gè)程序的結(jié)尾是END語(yǔ)句。
段的四種類(lèi)型
- 代碼段
- 數(shù)據(jù)段
- 堆棧段
- 附加段
2.代碼段結(jié)構(gòu)框:
- 定義段(使用SEGMENTS語(yǔ)句定義)
- 說(shuō)明物理段和邏輯段的關(guān)系,使用一個(gè)或者多個(gè)ASSUME語(yǔ)句實(shí)現(xiàn)
- 裝填段寄存器(只裝填數(shù)據(jù)型段寄存器)DS、ES
- 完成所需功能的程序段
- 設(shè)置返回DOS的方法
;代碼框架
DATA SEGMENTS ;定義數(shù)據(jù)段起始語(yǔ)句
———— ;定義數(shù)據(jù)
DATA ENDS ;定義數(shù)據(jù)段終止語(yǔ)句
CODE SEGMENT ;定義代碼段起始語(yǔ)句
ASSUME CS:CODE,DS:DATA;段關(guān)系說(shuō)明
START:MOV AX,DATA;裝填相應(yīng)的段寄存器
MOV DS,AX ;
———— ;完成所需功能的程序段
MOV AH,4CH ;設(shè)置返回DOS
INT 21H
CODE ENDS ;定義代碼段終止語(yǔ)句
END START ;程序結(jié)束
博客園-微機(jī)
8086指令


一.數(shù)據(jù)傳送指令
1.通用數(shù)據(jù)傳送指令
MOV;移動(dòng) MOV DST,SRC 執(zhí)行操作:(DST)<-(SRC)
PUSH;壓棧??PUSH SRC?? 執(zhí)行操作:(SP)<-(SP-2) ((SP)+1,(SP))<-(SRC)
POP;出棧?? POP DST ?? 執(zhí)行操作:(DST)<-((SP+1),(SP)) (SP)<-(SP-2)
XCHG;交換? XCHG OPR1,OPR2 ?? 執(zhí)行操作:(OPR1)<-->(OPR2)
2.累加器專(zhuān)用傳送指令
IN;輸入 IN AL,PORT(字節(jié)) 執(zhí)行操作:(AL)<-(PORT)(字節(jié)) ;長(zhǎng)格式
IN AX,PORT(字) 執(zhí)行操作:(AX)<-(PORT+1,PORT)(字) ;長(zhǎng)格式
IN AL,DX(字節(jié)) 執(zhí)行操作:(AL)<-(DX)(字節(jié)) ;短格式
IN AX,DX(字) 執(zhí)行操作:(AX)<-(DX+1,DX)(字) ;短格式
OUT;輸出 OUT PORT(字節(jié)),AL 執(zhí)行操作:(PORT)(字節(jié))<-(AL) ;長(zhǎng)格式
OUT PORT(字),AX 執(zhí)行操作:(PORT+1,PORT)(字)<-(AX) ;長(zhǎng)格式
OUT DX(字節(jié)),AL 執(zhí)行操作:(DX)(字節(jié))<-(AL) ;短格式
OUT DX(字),AX 執(zhí)行操作:(DX+1,DX)(字)<-(AX) ;短格式
在IBM-PC機(jī)里,外部設(shè)備最多可有65536個(gè)I/O端口,端口(即外設(shè)的端口地址)為0000FFFFH.其中前256個(gè)端口(0FFH)可以直接在指令中指定,這就是長(zhǎng)格式中的PORT,此時(shí)機(jī)器指令用二個(gè)字節(jié)表示,第二個(gè)字節(jié)就是端口號(hào).所以用長(zhǎng)格式時(shí)可以在指定中直接指定端口號(hào),但只限于前256個(gè)端口.當(dāng)端口號(hào)>=256時(shí),只能使用短格式,此時(shí),必須先把端口號(hào)放到DX寄存器中(端口號(hào)可以從0000到0FFFFH),然后再用IN或OUT指令來(lái) 傳送信息.
XLAT;換碼指令 XLAT OPR;(或者 XLAT) 執(zhí)行操作:(AL)<-((BX)+(AL))
3.有效地址送寄存器指令
LEA;(Load effective address)有效地址送寄存器 LEA REG,SRC 執(zhí)行操作:(REG)<-(SRC);指令把源操作數(shù)的有效地址送到指定的寄存器中
LDS;(Load DS with Pointer)指針?biāo)图拇嫫骱虳S指令 LDS REG,SRC 執(zhí)行操作:(REG)<-(SRC) (DS)<-(SRC+2) ;把源操作數(shù)指定的4個(gè)相繼字節(jié)送到由指令指定的寄存器及DS寄存器中,該指令常指定SI寄存器
LES;(Load ES with Pointer)指針?biāo)图拇嫫骱虴S指令 LES REG,SRC 執(zhí)行操作:(REG)<-(SRC) (ES)<-(SRC+2) ;把源操作數(shù)指定的4個(gè)相繼字節(jié)送到由指令指定的寄存器及ES寄存器中,該指令常指定DI寄存器
4.標(biāo)志寄存器傳送指令
LAHF;(Load AH with flags)標(biāo)志送AH LAHF 執(zhí)行操作:(AH)<-(PWS的低字節(jié));
SAHF;(Store AH into flags)AH送標(biāo)志寄存器 SAHF 執(zhí)行操作:(PWS的低字節(jié))<-(AH);
PUSHF;(push the flags)標(biāo)志進(jìn)棧 PUSHF 執(zhí)行操作:((SP)->(SP-2)) ((SP+1),(SP))<-(PSW) ;
POPF;(pop the flags)標(biāo)志出棧 POPF 執(zhí)行操作: (PSW)<-((SP+1),(SP))?? ((SP)->(SP+2)) ;
二、算術(shù)指令
1.加法指令
ADD;(add)加法 ?????? ADD DST,SRC 執(zhí)行操作:(DST)<-(DST)+(SRC);
ADC;(add with carry)帶進(jìn)位加法 ADC DST,SRC 執(zhí)行操作:(DST)<-(DST)+(SRC)+CF;
INC;(increment)加1 INC OPR 執(zhí)行操作:(OPR)<-(OPR)+1;
2.減法指令
SUB;(subtract)減法 ????SUB DST, SRC 執(zhí)行操作:(DST)<-(DST)-(SRC);
SBB;(subtract with borrow)帶借位減法 SBB DST, SRC 執(zhí)行操作:(DST)<-(DST)-(SRC)-CF;
DEC;(decrement)減1 ??DEC OPR 執(zhí)行操作:(OPR)<-(OPR)-1;
CMP;(compare)比較 ?? ?CMP OPR1,OPR2 執(zhí)行操作:(OPR1)-(OPR2)-1;
該指令與SUB指令一樣執(zhí)行減法操作,但不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置條件標(biāo)志西半球.
NEG;(negate)求補(bǔ)碼 ?? NEG OPR 執(zhí)行操作:(OPR)<--(OPR);
3.乘法指令
MUL;(unsigned multiple)無(wú)符號(hào)數(shù)乘法 MUL SRC 執(zhí)行操作:(AX)<--(AL)*(SRC);字節(jié)操作數(shù)
執(zhí)行操作:(DX,AX)<--(AX)*(SRC);字操作數(shù)
IMUL;(signed multiple)帶符號(hào)數(shù)乘法 IMUL SRC 執(zhí)行操作:與MUL相同,但必須是帶符號(hào)數(shù)
4.除法指令
DIV;(unsigned divide)無(wú)符號(hào)數(shù)除法 DIV SRC 執(zhí)行操作:(AL)<--(AX)/(SRC)的商 (AH)<--(AX)/(SRC)的余數(shù);字節(jié)操作數(shù)
執(zhí)行操作:(AX)<--(DX,AX)/(SRC)的商 (DX)<--(DX,AX)/(SRC)的余數(shù);字操作數(shù)
IDIV;(signed divide)帶符號(hào)數(shù)除法 IDIV SRC 執(zhí)行操作:與DIV相同,但必須是帶符號(hào)數(shù)
CBW;(convert byte to word)字節(jié)轉(zhuǎn)字 CBW 執(zhí)行操作:AL的內(nèi)容符號(hào)擴(kuò)展到AH.即如果(AL)的最高有效位為0,則(AH)=00;如(AL)的最高有效位為1,則(AH)=0FFH
CWD;(convert word to double)字轉(zhuǎn)雙字CWD 執(zhí)行操作:AX的內(nèi)容符號(hào)擴(kuò)展到DX.即如果(AX)的最高有效位為0,則(DX)=0;否則(DX)=0FFFFH

三、邏輯指令
1.邏輯運(yùn)算指令
AND;(and)邏輯與 ?????? ADD DST,SRC 執(zhí)行操作:(DST)<-(DST)and(SRC);
OR;(or)邏輯或 ?????? OR DST,SRC 執(zhí)行操作:(DST)<-(DST)or(SRC);
NOT;(not)邏輯非 ?????? NOT OPR 執(zhí)行操作:(OPR)<-非(OPR);
XOR;(exclusive or)邏輯異或 ??? XOR DST,SRC 執(zhí)行操作:(DST)<-(DST)xor(SRC);
TEST;(test)測(cè)試入標(biāo)志位 ??? TEST OPR1,OPR2 執(zhí)行操作:如下圖

2.移位指令
SHL;(shift logical left)邏輯左移 ???格式: SHL OPR,CNT(其余的類(lèi)似)
SAL;(shift arithmetic left)算術(shù)左移
SHR;(shift logical righr)邏輯右移
SAR;(shift arithmetic right)算術(shù)右移
ROL; (rotate left)循環(huán)左移
ROR; (rotate right)循環(huán)右移
RCL; (rotate left through carry)帶進(jìn)位循環(huán)左移
RCR; (rotate right through carry)帶進(jìn)位循環(huán)右移
其中OPR可以是除立即數(shù)以外的任何尋址方式.移位次數(shù)由CNT決定,CNT可以是1或CL.
循環(huán)移位指令可以改變操作數(shù)中所有位的位置;移位指令則常常用來(lái)做乘以2除以2操作.其中算術(shù)移位指令適用于帶符號(hào)數(shù)運(yùn)算,SAL用來(lái)乘2,SAR用來(lái)除以2;而邏輯移位指令則用來(lái)無(wú)符號(hào)數(shù)運(yùn)算,SHL用來(lái)乘2,SHR用來(lái)除以2
四、串處理指令
1.與REP相配合的MOVS、STOS和LODS指令
REP;REP重復(fù)串操作直到(CX)=0為上 ?REP string primitive(String Primitive可為MOVS,LODS或STOS指令) 執(zhí)行操作:1)如(CX)=0則退出REP,否則往下執(zhí)行.
2)(CX)<-(CX)-1
3)執(zhí)行其中的串操作
4)重復(fù)1)~3)
MOVS; 串傳送指令 MOVS ES:BYTE PTR[DI],DS:[SI] 執(zhí)行的操作:1)((DI))<-((SI)) ;應(yīng)在操作數(shù)中表明是字還是字節(jié)操作(此處的DST和SRC舉例實(shí)際說(shuō)明了)
2)字節(jié)操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1當(dāng)方向標(biāo)志DF=0時(shí)用+,當(dāng)方向標(biāo)志DF=1時(shí)用-
3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2 當(dāng)方向標(biāo)志DF=0時(shí)用+,當(dāng)方向標(biāo)志DF=1時(shí)用-
MOVSB(字節(jié)) DST,SRC
MOVSW(字) DST,SRC
CLD;(Clear direction flag) 該指令使DF=0,在執(zhí)行串操作指令時(shí)可使地址自動(dòng)增量;
STD;(Set direction flag) 該指令使DF=1,在執(zhí)行串操作指令時(shí)可使地址自動(dòng)減量.
STOS; 存入串指令 STOS DST
STOSB DST 字節(jié)操作:((DI))<-(AL),(DI)<-(DI)+-1
STOSW DST 字操作: ((DI))<-(AX),(DI)<-(DI)+-2
該指令把AL或AX的內(nèi)容存入由(DI)指定的附加段的某單元中,并根據(jù)DF的值及數(shù)據(jù)類(lèi)型修改DI的內(nèi)容,當(dāng)它與REP聯(lián)用時(shí),可把AL或AX的內(nèi)容存入一個(gè)長(zhǎng)度為(CX)的緩沖區(qū)中.
LODS; 從串取指令 LODS SRC
LODSB SRC 字節(jié)操作:(AL)<-((SI)),(SI)<-(SI)+-1
LODSW SRC 字操作: (AX)<-((SI)),(SI)<-(SI)+-2
該指令把由(SI)指定的數(shù)據(jù)段中某單元的內(nèi)容送到AL或AX中,并根據(jù)方向標(biāo)志及數(shù)據(jù)類(lèi)型修改SI的內(nèi)容.指令允許使用段跨越前綴來(lái)指定非數(shù)據(jù)段的存儲(chǔ)區(qū).該指令也不影響條件碼.一般說(shuō)來(lái),該指令不和REP聯(lián)用.有時(shí)緩沖區(qū)中的一串字符需要逐次取出來(lái)測(cè)試時(shí),可使用本指令.
2.與REPE/REPZ和REPNZ/REPNE聯(lián)合工作的CMPS和SCAS指令
REPE/REPZ 當(dāng)相等/為零時(shí)重復(fù)串操作 ?REPE(或REPZ) String Primitive 其中String Primitive可為CMPS或SCAS指令.
執(zhí)行的操作:1)如(CX)=0或ZF=0(即某次比較的結(jié)果兩個(gè)操作數(shù)不等)時(shí)退出,否則往下執(zhí)行
2)(CX)<-(CX)-1
3)執(zhí)行其后的串指令
4)重復(fù)1)~3)
REPNE/REPNZ 當(dāng)不相等/不為零時(shí)重復(fù)串操作 REPNE(或REPNZ) String Primitive 其中String Primitive可為CMPS或SCAS指令.
執(zhí)行的操作:除退出條件(CX=0)或ZF=1外,其他操作與REPE完全相同.
CMPS 串比較指令 CMP SRC,DST 執(zhí)行的操作: 1)((SI))-((DI))
????? CMPSB??????????? 2)字節(jié)操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1
????? CMPSW?????????? 2)字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2
指令把由(SI)指向的數(shù)據(jù)段中的一個(gè)字(或字節(jié))與由(DI)指向的附加段中的一個(gè)字(或字節(jié))相減,但不保存結(jié)果,只根據(jù)結(jié)果設(shè)置條件碼,指令的其它特性和MOVS指令的規(guī)定相同.
SCAS 串掃描指令 SCAS DST ?? 執(zhí)行的操作:
?????? SCASB?????????? 字節(jié)操作:(AL)-((DI)),(DI)<-(DI)+-1
????? SCASW???????????字操作: (AL)-((DI)),(DI)<-(DI)+-2
該指令把AL(或AX)的內(nèi)容與由(DI)指定的在附加段中的一個(gè)字節(jié)(或字)進(jìn)行比較,并不保存結(jié)果,只根據(jù)結(jié)果置條件碼.指令的其他特性和MOVS的規(guī)定相同.
五、控制轉(zhuǎn)移指令
1.無(wú)條件轉(zhuǎn)移指令
JMP(jmp) 跳轉(zhuǎn)指令
-
- 段內(nèi)直接短轉(zhuǎn)移 JMP SHORT OPR?? 執(zhí)行的操作: (IP)<-(IP)+8位位移量
- 段內(nèi)直接近轉(zhuǎn)移 JMP NEAR PTR OPR??執(zhí)行的操作:(IP)<-(IP)+16位位移量
- 段內(nèi)間接轉(zhuǎn)移 JMP WORD PTR OPR? 執(zhí)行的操作:(IP)<-(EA)
- 段間直接(遠(yuǎn))轉(zhuǎn)移 JMP FAR PTR OPR? 執(zhí)行的操作:(IP)<-OPR的段內(nèi)偏移地址 (CS)<-OPR所在段的段地址
- 段間間接轉(zhuǎn)移 JMP DWORD PTR OPR 執(zhí)行的操作:(IP)<-(EA) (CS)<-(EA+2)
2.條件轉(zhuǎn)移指令
1)根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移
??JZ(jump if zero) 結(jié)果為0則跳轉(zhuǎn)???JZ OPR?測(cè)試條件:ZF=1,跳轉(zhuǎn)
??JE(jump if equal) 結(jié)果相等則跳轉(zhuǎn)??JE OPR?測(cè)試條件:ZF=1,跳轉(zhuǎn)
JNZ(jump if not zero) 結(jié)果不為0則跳轉(zhuǎn)???JNZ OPR?測(cè)試條件:ZF=0,跳轉(zhuǎn)
??JNE(jump if not equal) 結(jié)果不相等則跳轉(zhuǎn)??JNE OPR?測(cè)試條件:ZF=0,跳轉(zhuǎn)
JS(jump if sign) 結(jié)果為負(fù)則跳轉(zhuǎn)??? JS OPR?測(cè)試條件:SF=1,跳轉(zhuǎn)
??JNS(jump if not sign) 結(jié)果不為負(fù)則跳轉(zhuǎn)??JNS OPR?測(cè)試條件:SF=0,跳轉(zhuǎn)
JO(jump if overflow) 結(jié)果溢出則跳轉(zhuǎn)??? JO OPR? 測(cè)試條件:OF=1,跳轉(zhuǎn)
??JNO(jump if not overflow) 結(jié)果不溢出則跳轉(zhuǎn)??JNO OPR? 測(cè)試條件:OF=0,跳轉(zhuǎn)
JP(jump if parity) 奇偶位為1則跳轉(zhuǎn)??? JP OPR? 測(cè)試條件:PF=1,跳轉(zhuǎn)
??JNP(jump if not parity 奇偶位不為1???? JNP OPR? 測(cè)試條件:PF=0,跳轉(zhuǎn)
JPE(jump parity even) 奇偶位為1則跳轉(zhuǎn)??? JPE OPR? 測(cè)試條件:PF=1,跳轉(zhuǎn)
??JPO(jump parity odd) 奇偶位不為1???? JPO OPR? 測(cè)試條件:PF=0,跳轉(zhuǎn)
JB/JNAE/JC ?低于,或者不高于或等于,或進(jìn)位位為1則轉(zhuǎn)移
??JNB/JAE/JNC ? 不低于,或者高于或者等于,或進(jìn)位位為0則轉(zhuǎn)移



寄存器
AX:數(shù)據(jù)累加器:算術(shù)運(yùn)算中的主要寄存器, 在乘除運(yùn)算中用來(lái)指定被除數(shù)和被除數(shù), 也是乘, 除,運(yùn)算后積和商的默認(rèn)存儲(chǔ)單元. 另外I/O指令均使用該寄存器與I/O設(shè)備傳送信息
BX:基址寄存器:指令尋址時(shí)常用做基址寄存器. 存入偏移量或偏移量的構(gòu)成成分
CX:計(jì)算寄存器:在循環(huán)指令操作或串處理指令中隱含計(jì)數(shù)
DX:數(shù)據(jù)寄存器:在雙字節(jié)長(zhǎng)運(yùn)算是, 與AX構(gòu)成32位操作數(shù), DX為高16位. 在某些I/O指令中, DX被用來(lái)存放端口地址
CS:代碼段:存放當(dāng)前程序的指令代碼
DS:數(shù)據(jù)段:存放程序所涉及的源數(shù)據(jù)或結(jié)果
SS:堆棧段:以”先入后出”為原則的數(shù)據(jù)區(qū)
ES:附加段:輔助數(shù)據(jù)區(qū), 存放串或其他數(shù)據(jù)
SP:堆棧指針寄存器:始終只是棧頂?shù)奈恢? 與SS寄存器一起組成棧頂數(shù)據(jù)的物理地址
BP:基址指針寄存器:系統(tǒng)默認(rèn)其指向堆棧中某一單元, 即提供棧中該單元的偏移量. 加段前綴后, BP可作非堆棧段的地址指針
SI:源變址寄存器:與DS聯(lián)用, 指示數(shù)據(jù)段中某操作的偏移量. 在做串處理時(shí), SI指示源操作數(shù)地址, 并有自動(dòng)增量或自動(dòng)減量的功能. 變址尋址時(shí), SI與某一位移量共同構(gòu)成操作數(shù)的偏移量
DI:目的變址寄存器:與DS聯(lián)用, 指示數(shù)據(jù)段中某操作數(shù)的偏移量, 或與某一位移量共同構(gòu)成操作數(shù)的偏移量. 串處理操作時(shí), DI指示附加段中目的地址, 并有自動(dòng)增量或減量的功能
IP:指令指針寄存器:它始終指向當(dāng)前將要執(zhí)行指令在代碼段中存放的偏移量
FR:控制標(biāo)志位:





浙公網(wǎng)安備 33010602011771號(hào)