汇编语言指令语句格式 – haodro.com

您所在的位置:网站首页 scasw指令 汇编语言指令语句格式 – haodro.com

汇编语言指令语句格式 – haodro.com

2023-04-15 17:25| 来源: 网络整理| 查看: 265

汇编语言常用指令

单片机汇编语言汇编错误原因分析汇编语言的指令格式,目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM、NASM;而Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法;一、汇编语言语句的通用格式 ;注释汇编语言的指令码的操作数的个数可以是0、1、2个;当操作数的个数为2的时候,语句还有两种不同的格式:Windows下Intel风格的汇编语言语句格式为: 指令码 目的操作数DST,源操作数SRC ;注释Unix/Linux下AT&T风格的汇编语言语句格式为: 指令码 源操作数SRC,目的操作数DST ;注释例如: CYCLE: ADD AX,02H ;(AX)汇编语言语句格式中的“名称“并不是所有语句都必需的,但是,如果语句中带有“名称“,那么,大多数情况下,“名称“都表示的是内存中某一存储单元的地址,也就是“名称“后面各项在内存中存放的第一个存储单元的地址(包括该“名称“所在段的段地址和段内偏移地址);比如上面的指令中,CYCLE就是该语句的名称,CYCLE表示的就是其后面的机器指令码在内存中存放的第一个地址;“名称“与指令码之间的分隔符可以是冒号“:“,也可以是空格字符“ “;当以冒号分割时,该名称代表的是一个标号;当以空格分割时,该名称代表的可能是标号,也可能是变量;当指令码有多个操作数的时候,相邻两个操作数之间要用逗号“,“分割;指令码与操作数之间必须以空格分割;汇编语言语句的注释必须以分号“;“开头;二、组成语句的元素1、常数:汇编语言中的常数有整数、字符串;二进制、八进制、十进制、十六进制;汇编语言采用不同的后缀区分:B:二进制数; O:八进制数; D:十进制数; H:十六进制数;当一个数值后面没有后缀的时候,默认为十进制数;字符串常数是用一对单引号(’’)括起来的一串字符;2、表达式:由操作数和操作符组成;算数运算操作符: +、-、*、/、MOD,等;取模运算MOD是取两数相除的余数;逻辑运算操作符: AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(逻辑异或);注意:逻辑运算符同时又可以是逻辑运算指令的指令码,只有当它们出现在指令的操作数部分时,才是操作符;例如:ADD AL,0CH ADD 0FH ;第一个ADD是指令码,第二个ADD是操作符;关系运算操作符: EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于);汇编语言中的表达式不能单独构成语句,只能是语句的组成部分;注意:语句中表达式的求值不是在语句执行时完成的,而是在对源程序进行汇编链接时完成的.所以,语句中各表达式的值必须在汇编或链接时就是确定的,也就是说,表达式中各标识符的值在汇编或链接时就应该是确定的;3、标号:标号是由标识符表示的指令的名称,用于指示对应指令的位置(地址);标号具有三个属性:段地址、偏移地址和类型;标号的段地址和偏移地址属性是指该标号所对应的指令所在段的段地址和段内偏移地址;标号的类型有两种:NEAR和FAR;标号定义成NEAR类型,表示该标号在段内使用,而定义成FAR类型则表示该标号可以在段间使用;标号的定义:在指令码前面加上标识符和冒号“:“;例如:START: PUSH DS这条语句里面,START就是我们定义的标号,它代表指令PUSH的地址,所以,标号可以作为程序转移指令的操作数(即:要转向的地址);标号还可以采用伪指令来定义;例如:用LABEL伪指令和过程定义伪指令来定义;4、变量:与高级语言一样,并不是所有的操作数都是常数,汇编语言也有自己的变量,变量的值在程序运行期间是可以被改变的;A.定义变量:汇编语言中,变量的定义是通过伪指令来完成的;定义变量的伪指令格式如下:变量名 DB 表达式 ;定义字节变量,又称单字节变量(1个连续字节),DB–》BYTE变量名 DW 表达式 ;定义字变量,又称双字节变量(2个连续字节),DW–》WORD变量名 DD 表达式 ;定义双字变量,又称四字节变量(4个连续字节),DD–》DWORD变量名 DF 表达式 ;定义六字节变量,又称六字节变量(6个连续字节),DF–》FWORD变量名 DQ 表达式 ;定义长字变量,又称八字节变量(8个连续字节),DQ–》QWORD变量名 DT 表达式 ;定义十字节变量(10个连续字节),DT–》TBYTE;其中,变量名是一个合法的标识符,变量名后面不能加冒号“:“,只能用空格;变量名不是必要的,可有可无;变量的类型由关键字DB、DW、DD、DQ、DT来定义;变量定义语句中的“表达式“是用于对变量进行初始化的,可有一下几种情况:(1).一个或多个常数或表达式;当为多个常数或表达式时,期间要用逗号隔开;如DATA1–DATA4;(2).带单引号的字符串;对于字节型(DB)变量,每个变量的大小为1个字节,每个变量的值不能超过1个字符,每个字节内存入一个字符的ASCII码值,整个字符串可以在同一对单引号内给出,这相当于是定义了一个字符数组,如DATA5;对于字类型(DW)变量,每个变量的大小为2个字节,每个变量的值不能超过2个字符,若为2个字符时,同样遵循高位存入高字节,低位存入低字节的规则;若为1个字符,则该字符的ASCII码值存入到低字节,高字节为00,如DATA6;对于双字类型(DD)变量,每个变量的大小为4个字节,每个变量的值不能超过2个字符,若为2个字符,同样遵循高位存入高字节,低位存入低字节的规则;但是2个字符的值被存入到双字变量的最低2个字节中,1个字符的值被存入到双字变量的最低1个字节中;对于长字类型(DQ)变量,每个变量的大小为8个字节,每个变量的值不能超过2个字符,若为2个字符,同样遵循高位存入高字节,低位存入低字节的规则;但是2个字符的值被存入到长字变量的最低2个字节中,1个字符的值被存入到长字变量的最低1个字节中;(3).一个问号“?“,表示该变量的值不确定,即:该变量所表示的内存单元中的内容是不确定的,或者说是,当表达式为问号时,变量所对应的内存区中并没有存入新的值,而只是预留出了相应的存储空间;如DATA7、DATA8(4).重复方式;此时的格式为: 重复次数 DUP(表达式);重复方式指出表达式的值可以重复地存储到变量对应的内存区中,重复的次数由伪指令给出,相当于定义数组;如DATA9、DATA10定义变量的例子:DATA1 DB 20H ;1字节变量DATA2 DW 0204H,1000H ;2字节变量DATA3 DB (-1*3),(15/3) ;1字节变量DATA4 DD 123456H ;4字节变量DATA5 DB ’0123’ ;字符串变量,相当于一个字符数组DATA6 DW ’AB’,’C’,’D’ ;字符串变量,相当于一个字符串数组;DATA7 DB ? ;1字节变量,未初始化DATA8 DD ? ;4字节变量,未初始化DATA9 DB 5 DUP(0) ;1字节变量,用5个0初始化,相当于是一个具有5个DB型元素的数组DATA10 DW 3 DUP(?) ;2字节变量,未初始化,相当于是一个具有3个DW型元素的数组变量定义语句中伪指令的功能是在变量名所对应的地址开始的内存区依次存入表达式中的各项值,表达式中的每项值所占用内存字节数与变量的类型对应;总结:一个变量的变量名实际上就代表了该变量所对应的内存区在内存段中的有效地址(偏移地址);高地址是指地址值相对较大,低地址是指地址值相对较小,高地址与低地址是相对而言的;5、变量的属性:(1).属性介绍一个变量具有一下属性:A.段地址(SEG):变量所在段的段地址;B.偏移地址(OFFSET):变量所在段内的偏移地址;C.类型(TYPE):变量的类型定义了每个变量所占用的内存字节数,对于DB、DW、DD、DQ、DT类型定义的变量所占用的内存字节数分别是1、2、4、8、10;通常又将DB、DW、DD类型所定义的变量分别成为BYTE类型、WORD类型、DWORD类型变量;常用标识符的类型值列表:标识符种类 字节变量 字变量 双字变量 近标号NEAR 远标号FARTYPE的值 1 2 4 -1 -2D.长度(LENGTH):变量定义时,一个变量名所定义的变量个数;在含有DUP操作符的变量定义中,变量名所定义的变量个数为定义格式中的重复次数;在其它各种变量定义中,每个变量名所定义的变量个数均为1个;E.大小(SIZE):变量定义语句中,分配给同一个变量名的所有变量的总的字节数,其值为该变量的类型与长度的成绩;其中,段地址、偏移地址和类型属性是变量的主属性,而长度和大小属性是变量的辅助属性;(2).属性操作符:操作符 表达式 含义SEG SEG 变量名或标号 取出变量名或标号所在段的段地址OFFSET OFFSET 变量名或标号 取出变量名或标号所在段内的偏移地址TYPE TYPE 变量名或标号 取出变量名或标号的类型(变量所占用的字节数)LENGTH LENGTH 变量名 取出变量的长度SIZE SIZE 变量名 取出变量的大小这些操作符不能单独构成语句,只能作为表达式的组成部分,并且表达式的求值也是在汇编过程中完成的;6.强制类型转换操作符PTR格式:数据类型 PTR 地址表达式格式中的“数据类型“可以是BYTE、WORD、DWORD、NEAR、FAR;前三种类型是变量的类型,后两种类型是标号的类型;格式中的表达式可以是变量、标号、其它地址表达式;PTR操作符的功能是用来重新定义已定义的变量或标号的类型,其作用域只在当前语句中; 例如:DATA1 DW 02HMOV BYTE PTR DATA1,AL这条指令中,是把DATA1的类型转换为BYTE类型,然后把AL中的内容存放到DATA1的最低一个字节中;作用域只在这条MOV语句中,过了这条语句,DATA1仍然是DW类型,即:DATA1原来的类型并没有被修改;

汇编语言的指令语句格式有哪四部分

标号、操作码、操作数,和注释。

一般格式为:标号:语句助记符,操作数;注释ADDR1:MOV AL,100;AL寄存器赋值100

汇编语言 bt语句

  汇编语言中bt是位操作指令:  指令的格式:BT/BTC/BTR/BTS Reg/Mem,Reg/Imm ;80386+  受影响的标志位:CF  位检测指令是把第一个操作数中某一位的值传送给标志位CF,具体的哪一位由指令的第二操作数来确定。  根据指令中对具体位的处理不同,又分一下几种指令:  BT:把指定的位传送给CF;  BTC:把指定的位传送给CF后,还使该位变反;  BTR:把指定的位传送给CF后,还使该位变为0;  BTS:把指定的位传送给CF后,还使该位变为1;  例如:假设(AX)=1234H,分别执行下面指令。  BT AX, 2 ;指令执行后,CF=1,(AX)=1234h  BTC AX, 6 ;指令执行后,CF=0,(AX)=1274h  BTR AX, 10 ;指令执行后,CF=0,(AX)=1234h  BTS AX, 14 ;指令执行后,CF=0,(AX)=5234h

汇编语言中指令性语句与指示性语句的区别

指令性语句:主要由指令构成的语句,

其格式为:          例如:            LOP:ADD AL,  注意:标号(这里是LOP)必须用“:”结尾。

指示性语句:要是由命令(亦称为伪指令)构成的指令,是用来只是汇编程序进行汇编       操作的,

其格式为:         

 

INT的汇编语言指令

在汇编语言中int是一个向CPU发送中断的指令。格式为INT vec。vec为中断向量号,其值为0~255。CPU根据这个向量号去调用内核对应的中断例程。指令操作为: (SP)←(SP)-2,((SP)+1:(SP))←(FR) (IF)←0,(TF)←0 (SP)←(SP)-2,((SP)+1:(SP))←(CS) (SP)←(SP)-2,((SP)+1:(SP))←(IP) (CS)←(vec*4+2),(IP)←(vec*4) INT vec 指令只影响IF和TF(将其置零)。

汇编语言指令大全,要详细的 !!!!

最佳答案IBM-PC汇编语言指令集数据传送指令集 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 m PUSHF,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标志位: C CLD,STD功能: 设定方向标志语法: CLD STD标志位: D CLI,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机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。 这里将简单介绍其指令类型及指令说明,如有要求给具体的指令格式及应用,请与amay联系,amay加以更新。 1)数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中。数据传送指令类型 指 令 说 明通用数据传送指令 MOV(传送)、PUSH(进栈)、POP(出栈)、XCHG(交换)累加器专用传送指令 IN(输入指令) 、OUT(输入指令)地址传送指令 LEA(有效地址送寄存器)、LDS(指针送寄存器和DS)、LES(指针送寄存器和ES)标志寄存器传送指令 LAHF(标志送AH)、SAHF(AH送标志寄存器)、PUSHF(标志进栈)、POPF(标志出栈)2)算术指令:用来执行算术运算。 算术指令类型 指 令 说 明加法指令 ADD(加法)、ADC(带进位加法)、INC(加1)减法指令 SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较)乘法指令 MUL(无符号数乘法)、IMUL(带符号数乘法)除法指令 DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字)3)逻辑指令:对字或字节执行逻辑运算。 逻辑指令类型 指 令 说 明逻辑运算指令 AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试)移动指令 SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(循环右移)、RCL(带进位循环左移)、RCR(带进位右移)4)串处理指令:处理存放存储器里的数据串。 串处理指令类型 指 令 说 明指 令 MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串取)、STOS(存入串)5)控制转移指令:用来控制程序的执行流程。 控制转移指令类型 指 令 说 明无条件转移指令 JMP(段间和段内转移)条件转移指令 JZ(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移)循环指令 LOOP(循环指令)、LOOPPZ/LOOPE(当为0或相等时循环指令)、LOOPNZ/LOOPNE(当不为0或不相等时循环指令)子程序指令 CALL(调用指令)、RET(返回指令)中断指令 INT(中断)、INTO(如溢出则中断)、RIET(从中断返回)

简述MCS—51汇编语言指令格式

  采用助记符表示的汇编语言指令格式如下:

  标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由1~8个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。

  操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。

  操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。

  注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。

给出汇编语言执行性语句和说明性语句的一般格式

执行性语句=指令: mov ax bx说明行语句=注释:; ; Executable name : TESTSYSCALL-HELLO指令分可执行指令和伪指令

关于王爽的汇编语言的加减乘除指令

汇编算术运算指令 8086的算术运算类指令能够对二进制或十进制(BCD码)数进行加、减、乘、除运算,操作数的数据形式可以是8位或16位的无符号数或带符号数。对于单操作数指令,不允许使用立即数形式;对于双操作数指令,只有源操作可以使用立即数,两个操作数中必须有一个在寄存器中。1. 加法指令指令格式: 加法 ADD DST, SRC; (DST)←(SRC)+(DST) 带进位加法 ADC DST, SRC; (DST)←(SRC)+(DST)+CF 加1 INC OPR; (OPR)←(OPR)+1 注意: 这三条指令运算结果将影响状态标志位,但是INC指令不影响标志CF。下面以8位数加法运算为例作简要说明。 因为运算结果没有超出单字节无符号数范围,所以CF=0;运算结果超出单字节有符号数范围,所以OF=1;其他标志 ZF=0,SF=1。 以上运算可以用两条指令实现: MOV AH,01 ADD AH,7FH ADC指令主要用于多字节或多精度数据相加的运算。 例如进行二组四字节(双精度)数1122 3344H和5566 7788H的相加运算时,使用单字节加法指令需要执行4次加法运算,运算过程中,通过ADC指令将低字节运算产生的进位加到高位字节,而使用字加法指令,只需要执行两次加法运算,当然也必须通过ADC指令处理低字运算产生的进位。使用ADC指令,必须先将CF标志置0。2. 减法指令 指令格式: 减法 SUB DST,SRC ; (DST)←(DST)-(SRC) 带进位减法 SBB DST,SRC ; (DST)←(DST)-(SRC)-CF 减1 DEC OPR ; (OPR)←(OPR)-1 求补 NEG OPR ; (OPR)←0FFFFH-(0PR)+1 比较 CMP OPR1, OPR2 ; (OPR1)-(OPR2)

SBB指令主要用于多字节或多精度数据相减的运算;NEG指令对操作数进行取反加1的操作;CMP指令类似SUB指令执行减法操作,但不产生运算结果,对标志位影响见表4.3。 这几条指令的运算结果都影响状态标志位,只是DEC指令不影响标志CF。

直接相减算式结果为: (4006AH)=520FH,SF=0,ZF=0,CF=0,OF=0 补码加法算式结果为: (4006AH)=520FH,SF=0,ZF=0,CF=1,OF=0算式中FECAH是(-0136H)的补码。 可见,两种算式中运算结果是相同的,但是对标志CF的影响不同,因为是减法运算,正确结果应是CF=0。用补码加法得到运算结果CF=1,应求反后送入CF。 表4-3 CMP指令对状态标志位的影响3. 乘法指令 乘法运算分为无符号数运算和有符号数运算,各有相应的指令,并使用双操作数。两个8位二进制数相乘,积为16位二进制数;两个16位二进制数相乘,积为32位二进制数。指令格式: 无符号数乘法 MUL SRC;(AX)←(AL)×(SRC)8位数乘法 (DX,AX)←(AX)×(SRC)16位数乘法 带符号数乘法 IMUL SRC; 操作同上,但是操作数为带符号数 注意: 进行字节运算时,目的操作数必须是累加器AL,乘积在寄存器AX中;进行字运算时,目的操作数必须是累加器AX,乘积在寄存器DX、AX中。源操作数不允许使用立即数寻址方式。 乘法指令运算结果只影响状态标志CF、OF,对其他状态标志位无影响(状态不定)。 对于 MUL 指令,如果字节型数据相乘之积(AH)=0或字数据相乘之积(DX)=0,则CF=OF=0,否则CF=OF=1;对于IMUL指令,如果字节数据相乘之积AH或字数据相乘之积DX的内容是低一半的符号扩展,则CF=OF=0,否则CF=OF=1。4. 除法指令 除法运算分为无符号数运算和有符号数运算,各有相应的指令,并使用双操作数。当除数是8位或16位二进制数时,要求被除数是16位或32位的二进制数。指令格式: 无符号数除法 DIV SRC;(AL)←(AX)/(SRC)8位二进制数除法的商 (AH)←(AX)/(SRC)8位二进制数除法的余数 或(AX)←(DX,AX)/(SRC) 16位二进制数除法的商 (DX)←(DX,AX)/(SRC) 16位二进制数除法的余数 带符号数除法 IDIV SRC; 操作同上,但是操作数为带符号数 注意: 当除数是字节数据时,被除数必须放在AX中,当除数是字数据时,被除数必须放在DX,AX中。 除法指令运算结果对状态标志无定义(状态不定)。但是,若除数为0或带符号数,则当除法运算结果超出规定的范围时,将产生0号中断,与溢出标志OF无关。 8086/8088 规定 IDIV 指令运算结果余数的符号与被除数相同。 带符号数除法运算中,当被除数位数不够时,则需将被除数扩展到所需的位数。8086/8088设有带符号数扩展指令。 指令格式: 字节扩展到字CBW;将寄存器AL中的符号位扩展到寄存器AH 字扩展到双字CWD;将寄存器AX中的符号位扩展到寄存器DX 这两条指令不影响标志位。5. 十进制调整指令 BCD码是一种用二进制编码的十进制数,又称为二—十进制数。8086/8088中BCD码分为两种形式: 其一是用四位二进制数表示一位十进制数,称为压缩的BCD码;其二是用八位二进制数表示一位十进制数,称为非压缩的BCD码,它的低四位是BCD码,高四位没有意义。由于BCD码是四位二进制编码,四位二进制数共有16个编码,BCD码只用其中的10个,其余没用的编码称为无效码。BCD码运算结果进入或跳过无效码区时,都会出现错误。为了得到正确结果,必须进行调整。8086/8088针对压缩BCD码和非压缩BCD码,分别设有两组十进制调整指令,其调整方法略有不同。 (1) 压缩BCD码十进制调整指令指令格式:加法十进制调整DAA;(AL)←把AL中的和调整到压缩BCD码格式减法十进制调整DAS;(AL)←把AL中的差调整到压缩BCD码格式

调整方法是: 累加器AL低4位大于9或辅助进位标志位AF=1,则累加器AL加06H修正。累加器AL高4位大于9或进位标志位CY=1,则累加器AL加60H修正。累加器AL高4位大于等于9,低4位大于9,则累加器AL进行加66H修正。 进行BCD码加法运算59+68=127 此例中,BCD码加法结果的低四位使AF=1,高四位大于9,所以加66H进行修正。 注意: 压缩BCD码加法或减法十进制调整指令必须用在ADD(ADC)或SUB(SBB)指令之后,调整结果对标志OF无影响,对其他状态标志位均有影响。 减法十进制调整方法与加法十进制调整类同,只是将加6变为减6操作。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3