汇编语言指令2
汇编语言程序设计基本命令

汇编语言程序设计基本命令汇编语言是一种底层的编程语言,直接操作计算机硬件,其指令由一系列的机器码组成。
在汇编语言程序设计中,我们需要了解一些基本的命令,包括数据传送指令、算术运算指令、控制转移指令等,下面就对这些命令做一详细的介绍。
1.数据传送指令在汇编语言中,数据传送指令用来将数据从一个位置复制到另一个位置,常用的数据传送指令有MOV、LEA和XCHG。
-MOV指令:将源操作数的值复制给目标操作数,格式为MOV目标操作数,源操作数。
-LEA指令:用来将有效地址(即内存中的地址)传送给寄存器,格式为LEA目标操作数,源操作数。
-XCHG指令:交换两个操作数的值,格式为XCHG目标操作数,源操作数。
2.算术运算指令在汇编语言中,我们可以使用一系列算术运算指令来对数据进行运算和处理,常见的算术运算指令有ADD、SUB、MUL和DIV等。
-ADD指令:用于进行加法运算,格式为ADD目标操作数,源操作数。
-SUB指令:用于进行减法运算,格式为SUB目标操作数,源操作数。
-MUL指令:用于进行乘法运算,格式为MUL目标操作数,源操作数。
-DIV指令:用于进行除法运算,格式为DIV目标操作数,源操作数。
控制转移指令用于改变程序的执行流程,常见的控制转移指令有JMP、JZ、JE、JNE等。
-JMP指令:用于无条件地跳转到目标地址继续执行,格式为JMP目标地址。
-JZ指令:用于当结果为零时跳转到目标地址继续执行,格式为JZ目标地址。
-JE指令:用于当结果相等时跳转到目标地址继续执行,格式为JE目标地址。
-JNE指令:用于当结果不相等时跳转到目标地址继续执行,格式为JNE目标地址。
4.逻辑运算指令逻辑运算指令用于对数据进行逻辑运算,常见的逻辑运算指令有AND、OR、XOR和NOT等。
-AND指令:对两个操作数的对应位进行与运算,格式为AND目标操作数,源操作数。
-OR指令:对两个操作数的对应位进行或运算,格式为OR目标操作数,源操作数。
常用汇编指令

常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。
在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。
本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。
一、数据传输指令1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。
例如,MOV AX, BX将寄存器BX的内容复制到AX中。
2. LEA指令:LEA指令用于将内存地址加载到寄存器中。
例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。
3. PUSH指令:PUSH指令用于将数据压入栈中。
例如,PUSH AX将AX中的数据压入栈中。
4. POP指令:POP指令用于从栈中弹出数据。
例如,POP BX将栈中的数据弹出到BX中。
二、算术运算指令1. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。
例如,ADD AX, BX将BX的值加到AX中。
2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。
例如,SUB AX, BX从AX中减去BX的值。
3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。
例如,MUL BX将累加器的值与BX相乘。
4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。
例如,DIV BX将累加器的值除以BX。
三、逻辑运算指令1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。
例如,AND AX, BX将AX与BX进行逻辑与操作。
2. OR指令:OR指令用于对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。
例如,OR AX, BX将AX与BX进行逻辑或操作。
3. NOT指令:NOT指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。
汇编的基本常用指令

汇编的基本常用指令汇编语言是一种底层的程序设计语言,主要用于编写机器码指令。
以下是一些常用的汇编指令:1. MOV:将数据从一个位置复制到另一个位置。
2. ADD:将两个操作数相加,并将结果存储在目的操作数中。
3. SUB:将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。
4. INC:将一个操作数的值增加1。
5. DEC:将一个操作数的值减少1。
6. CMP:比较两个操作数的值,并将结果影响到标志寄存器中。
7. JMP:无条件跳转到指定的代码位置。
8. JZ / JE:当指定的条件成立时,跳转到指定的代码位置(零标志或相等标志)。
9. JNZ / JNE:当指定的条件不成立时,跳转到指定的代码位置(非零标志或不相等标志)。
10. JL / JB:当源操作数小于目的操作数时,跳转到指定的代码位置(小于标志或借位标志)。
11. JG / JA:当源操作数大于目的操作数时,跳转到指定的代码位置(大于标志或进位标志)。
12. CALL:调用一个子程序或函数。
13. RET:返回子程序或函数的调用处。
14. NOP:空操作,用于占位或调整程序代码的位置。
15. HLT:停止运行程序,将CPU置于停机状态。
这里只列举了一些基本的汇编指令,实际上汇编语言有更多更复杂的指令,具体使用哪些指令取决于所使用的汇编语言和目标处理器的指令集架构。
继续列举一些常用的汇编指令:16. AND:将两个操作数进行按位与运算,并将结果存储在目的操作数中。
17. OR:将两个操作数进行按位或运算,并将结果存储在目的操作数中。
18. XOR:将两个操作数进行按位异或运算,并将结果存储在目的操作数中。
19. NOT:对一个操作数的每一位进行取反操作。
20. SHL / SAL:将一个操作数的每一位向左移动指定的位数。
对于无符号数,使用SHL指令;对于带符号数,使用SAL指令。
21. SHR:将一个操作数的每一位向右移动指定的位数,高位空出的位使用0填充。
汇编语言各种指令解释及用法2篇

汇编语言各种指令解释及用法2篇汇编语言指令解释及用法汇编语言是一种低级编程语言,用于编写机器指令,直接控制计算机硬件。
它的指令集相对简单,但是非常灵活,可以直接操作寄存器和内存,实现各种功能。
在这篇文章中,我将为大家解释汇编语言中一些常用指令的含义和用法。
第一篇:数据传输与操作指令1. MOV指令:MOVE(MOV)指令用于在寄存器和内存之间传输数据。
例如,MOV AX, BX将BX的值传输到AX寄存器中。
2. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。
例如,ADD AX, 5将AX寄存器的值与5相加,并将结果存储在AX中。
3. SUB指令:SUB指令用于将两个操作数相减,并将结果存储在目标操作数中。
例如,SUB AX, 3将AX寄存器的值减去3,并将结果存储在AX中。
4. INC指令:INC指令用于将目标操作数的值加1。
例如,INC CX将CX寄存器的值增加1。
5. DEC指令:DEC指令用于将目标操作数的值减1。
例如,DEC DX将DX寄存器的值减去1。
6. MUL指令:MUL指令用于将两个无符号操作数相乘,结果保存在一对寄存器中。
例如,MUL BX将AX寄存器的值与BX相乘,并将结果保存在DX:AX寄存器对中。
7. DIV指令:DIV指令用于将两个无符号操作数相除,商保存在AL中,余数保存在AH中。
例如,DIV CX将DX:AX寄存器对的值除以CX,并将商保存在AL中,余数保存在AH中。
8. CMP指令:CMP指令用于比较两个操作数的值,并设置相应的标志位。
例如,CMP AX, BX将AX寄存器的值与BX进行比较。
第二篇:跳转指令与循环指令1. JMP指令:JMP指令用于无条件跳转到目标地址。
例如,JMP LABEL将程序跳转到标签LABEL处执行。
2. JZ指令:JZ指令用于判断前一次的比较结果是否为零,如果为零则跳转到目标地址。
例如,JZ LABEL将在前一次比较结果为零时跳转到标签LABEL处。
汇编语言的所有指令

汇编语言的所有指令数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。
汇编语言2-4逻辑移位指令

8086指令系统
一、数据传送类; 二、算术运算类; 三、位操作指令(逻辑运算和移位类); 四、串操作类; 五、控制转移类; 六、处理器控制类;
第 2章
8086指令系统
位操作指令,它们都是按位进行操作的包含逻辑运
算类指令和移位指令。 位操作类指令以二进制位为基本单位进行数据的操 作;这是一类常用的指令,都应该特别掌握 注意这些指令对标志位的影响 要求:全面而准确地理解每条指令的功能和应用 重点掌握以下指令:
第 2章
2、逻辑或指令OR
功能:对两个操作数执行按位逻辑或运 算,结果送到目的操作数
OR reg,imm/reg/mem ;reg←reg∨imm/reg/mem OR mem,imm/reg ;mem←mem∨imm/reg
说明:(1)按位逻辑或运算; (2)OR指令对操作数的限制和对标志位的影响; 思考: (1)某一个操作数自己和自己相逻辑或? 置某些位 (2)OR指令主要用在什么场合?
RCR reg/mem,1/CL
;带进位循环左移
;带进位循环右移
演示
第 2章
说明:循环移位指令
对操作数:同移位指令。 对标志的影响:
(1)按照指令功能设置进位标志CF (2)不影响SF、ZF、PF、AF (3)对于OF,同移位指令。如果进行一位移动, 则按照操作数的最高符号位是否改变,相应设置 溢出标志OF:如果移位前的操作数最高位与移位 后操作数的最高位不同(有变化),则OF = 1; 否则OF = 0。当移位次数大于1时,OF不确定
第 2章
例:移位指令
mov cl,4 mov al,0f0h ;al=f0h shl al,1 ;al=e0h ;CF=1,SF=1、ZF=0、PF=0,OF=0 shr al,1 ;al=70h ;CF=0,SF=0、ZF=0、PF=0、OF=1 sar al,1 ;al=38h ;CF=0,SF=0、ZF=0、PF=0、OF=0 sar al,cl ;al=03h ;CF=1,SF=0、ZF=0、PF=1 、OF=0
第3章_MCS-51单片机指令系统及汇编语言程序设计2

3. 汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用? 答案: MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。 标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操 作码之间可以有空格。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 4. MCS-51汇编语言有哪几条常用伪指令?各起什么作用? 答案: ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址; EQU:赋值指令,用来给变量标号赋予一个确定的数值; DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中; DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中; DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元; BIT:位定义,其功能是把位地址赋给字符名称; END:汇编结束,表明汇编语言程序结束。
2.顺序程序
顺序程序是指程序中没有使用转移类指令的程序段,机器执行这 类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环, 也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0~255之间,将其除以100后, 商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存 放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中, #64H可直接写成#100 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH ;将10送入B中, #0AH可直接写成#10 DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $
汇编语言指令汇总

汇编语言指令汇总汇编语言是一种底层编程语言,用于编写计算机程序。
在汇编语言中,指令是执行特定操作的基本单元。
以下是一些常见的汇编语言指令的汇总:1.数据传输指令:-MOV:将源操作数的值复制到目的操作数。
-PUSH:将数据压入栈中。
-POP:从栈中弹出数据。
-LEA:将源操作数的有效地址加载到目的操作数中。
2.算术和逻辑指令:-ADD:将两个操作数相加,结果存储在目的操作数中。
-SUB:将第二个操作数从第一个操作数中减去,结果存储在目的操作数中。
-MUL:将两个操作数相乘,结果存储在目的操作数中。
-DIV:将第一个操作数除以第二个操作数,商存储在目的操作数中。
3.分支和循环指令:-JMP:无条件跳转到指定的地址。
-CMP:比较两个操作数的值。
-JZ/JNZ:当比较结果为零/非零时,跳转到指定的地址。
-JE/JNE:当比较结果为相等/不相等时,跳转到指定的地址。
-JG/JGE/JL/JLE:当比较结果为大于/大于等于/小于/小于等于时,跳转到指定的地址。
-LOOP:循环指令,根据计数寄存器的值重复执行指定的代码块。
4.中断指令:-INT:引发中断,将程序控制权转移到中断服务程序。
-IRET:从中断服务程序返回到调用程序。
5.位操作指令:-AND/OR/XOR:按位与/或/异或操作。
-NOT:按位取反操作。
-SHL/SHR:逻辑左移/逻辑右移操作。
6.I/O指令:-IN:从输入端口读取数据。
-OUT:向输出端口写入数据。
7.标志位操作指令:-CLC:清除进位标志位。
-STC:设置进位标志位。
-CLI:禁用中断。
-STI:启用中断。
8.字符串指令:-MOVS:将一个字符串从源地址移动到目的地址。
-CMPS:比较两个字符串的内容。
-LODS:从源地址加载一个字符或一个字符串。
-STOS:存储一个字符或一个字符串到目的地址。
9.其他指令:-NOP:空操作指令。
-HLT:停止运行指令。
以上只是一些常见的汇编语言指令,汇编语言的指令集因计算机体系结构而异。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 逻辑运算指令
指令格式
执行操作
AND dst ,src (dst ) ← (dst )∧(src ) OR dst ,src (dst ) ← (dst )∨(src ) NOT oprd (oprd )← (oprd ) XOR dst ,src
(dst ) ← (dst )∨(src )
TEST oprd1,oprd2 (oprd1)∧(oprd2)
2. 移位指令
SHL oprd,
1 CL
SAL oprd,
1 CL
SHR oprd,
1 CL SAR oprd,
1 CL
CF
CF
CF
CF
执行操作
指令格式
▲ 左移: 高位 ← 低位 右移: 高位 → 低位 ▲ 移出位进入CF 标志
▲ 对移位指令,移出CF 标志后丢失 ▲ 逻辑左移、算术左移的结果相同 ▲ 逻辑右移,新移入的信息以0填入
算术右移,保持最高有效位原来的值(符号为不变) 3. 循环移位指令
指令格式
执行操作
CF
CF
CF
CF
ROL oprd,
1 CL
ROR oprd,
1 CL
RCL oprd, 1
CL
RCR oprd, 1 CL
ROL
CF
CF
ROR
CF
CF
RCL RCR
▲左移:高位←低位
右移:高位→低位
▲移出位进入CF标志
▲对循环移位指令,改变各位的位置,信息不丢失▲带进位循环移位,CF标志参加循环移位
注意事项:
SHL AL, 1
SHR AL, CL
ROL BX, 1
RCR AL, CL
源操作数为移位的次数
目的操作数类型决定操作类型
对标志位的影响
▲移位指令:
①据结果设置CF、SF、ZF、PF,对AF无定义
②OF只在移位次数为1时有效,其他无定义
移位后,最高有效位发生变化,则OF=1,否则为0 ▲对循环移位指令:
①据移位结果设置CF,对其他标志无影响
②OF标志与移位指令同
控制转移指令
指令类型助记符无条件转移JMP
条件转移JE/JZ, JNE/JNZ, JS, JNS, JO, JNO JP, JNP, JC, JNC, JCXZ
JA/JNBE, JAE/JNB, JB/JNAE, JBE/JNA
JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG
循环控制LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ
过程调用CALL, RET
中断指令INT, INTO, IRET
1)无条件转移指令JMP
格式JMP 目标地址
执行操作无条件转移到目标地址处
2)条件转移指令
格式Jcc 符号地址
测试条件的助记符
执行当转移条件满足,转向目标地址去执行。
当、、不满足,执行Jcc后的下一条指令。
转移方式只允许段内直接短方式,跳转范围在-128~127
按转移条件不同,条件转移指令可以分为四大类:
①以单个状态标志作为转移条件
②以CX的值为0作为转移条件
助记符转移条件
JCXZ CX=0③以两个无符号数比较的结果作为转移条件
④以两个带符号数比较的结果作为转移条件
3) 循环指令
格式LOOPxx符号地址
执行①(CX)←(CX)- 1 此操作不影响标志
②检查转移条件,满足,转向目标地址去执行;
不满足,执行LOOPxx后一条指令转移方式只允许段内直接短方式,跳转范围-128~127
循环指令说明:
LOOP退出循环条件是(CX)= 0
LOOPZ和LOOPNZ提供了提前结束循环的可能,
不一定要等到(CX)= 0才退出循环。
4) 调用和返回指令
调用指令CALL ① 段内直接调用
格式 CALL 符号地址 ;NEAR 属性 执行 (SP ) ← (SP )- 2 (SS :SP ) ← (IP )
(IP ) ← 符号地址的偏址 ② 段间直接调用
格式 CALL 符号地址 ;FAR 属性 执行
(SP ) ← (SP )- 2 (SS :SP ) ← (CS ) (SP ) ← (SP )- 2 (SS :SP ) ← (IP ) (IP ) ← 符号地址的偏址 (CS ) ← 符号地址的段址
; 转至符号地址处取指令
入栈保存返回地址偏值
入栈保存返回地址段值
入栈保存返回地址偏值
转至符号地址
返回指令RET
①段内返回
格式RET
执行(IP)←(SS:SP)
(SP)←(SP)+ 2 ②段间返回
格式RET 或RETF
执行(IP)←(SS:SP)
(SP)←(SP)+ 2
(CS)←(SS:SP)
(SP)←(SP)+ 2
注意:
在调用、返回指令中,
利用堆栈保存、恢复返回地址。
对堆栈的操作应有目的性,
不乱用堆栈操作,不随意修改堆栈内容,否则易造成死机。
5) 中断调用、中断返回指令中断子程以类型号N来区分
从堆栈取返回地址偏值从堆栈取返回地址偏值
从堆栈取返回地址段值
共有256个类型号(0~FFH, 即 0~255) 类型号0 处理除0错误的中断子程 类型号4H 处理溢出时的中断子程 类型号9H 处理键盘操作的中断子程
类型号21H 与DOS 系统功能相关的中断子程
中断调用指令INT
格式 INT N ;其中 N=0 ~FFH 即0~255
执行 (SP ) ← (SP )- 2
(SS :SP )← (PSW ) IF ← 0 清IF 标志 TF ← 0 清TF 标志 (SP ) ← (SP )- 2
(SS :SP )← (CS ) (SP ) ← (SP )- 2 (SS :SP )← (IP ) (IP ) ← (0: N × 4) (CS ) ←(0: N ×4 + 2) 中断返回指令IRET 格式 IRET
入栈保存CS
入栈保存PSW
入栈保存IP
取中断子程入口地址
保 存 现 场
执行
(IP)←(SS:SP)
(SP)←(SP)+ 2
(CS)←(SS:SP)
(SP)←(SP)+ 2
(PSW)←(SS:SP)
(SP)←(SP)+ 2
溢出中断调用INTO
格式INTO
执行OF为1时,执行INT 4;
OF为0时,执行INTO下一条执行。
从堆栈取返回地址,
并恢复现场。