16位汇编div指令溢出

秋水无痕2017 2018-07-09 12:45:41
使用div指令做除法时情况如下:
被除数:FFFFFFFFh(16位允许的最大被除数,高位dx寄存器加上低位ax寄存器共32位)
除数:2h

被除数的高16位 >= 除数 所以结果必定大于16位,默认商寄存器ax仅16位,肯定会发生溢出。

网上有的解决办法是把高位dx与ax分开进行div,但是好像这样是错误的。
首先,两次除法暂存的商,无法进行合并出最终正确的商;
其次,ax默认为商寄存器,永远是无法存储超过16的div结果,必定会溢出;

那么应该如何解决这个问题呢?
我也想过,是否能将高位先乘以10000h后进行div + 低位div的商,但这样明显是行不通的,因为高危已经>=除数了

求解有没有比较完美的解决办法.
...全文
857 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋水无痕2017 2018-07-09
  • 打赏
  • 举报
回复
我试试看。idev指令还没学到.
  • 打赏
  • 举报
回复
你也可以试着用16位指令写一个有符号数32/16,这个要复杂一些。
秋水无痕2017 2018-07-09
  • 打赏
  • 举报
回复
assume cs:code,ss:stack
stack segment
dw 0h,0h,0h,0h,0h,0h,0h,0h
stack ends

code segment
start: mov ax, stack
mov ss, ax
mov sp, 010h

mov ax, 0FFFFh
mov dx, 0FFFFh
mov bx, 01h

push ax
mov ax, dx
xor dx, dx
div bx
mov cx, ax

pop ax
div bx

push cx
push ax

mov ax, 04c00h
int 021h
code ends
end start
秋水无痕2017 2018-07-09
  • 打赏
  • 举报
回复
没毛病, 谢谢 !
  • 打赏
  • 举报
回复
用16位指令可以:
add word ptr [low 16-bit],reg
adc word ptr [high 16-bit],0
秋水无痕2017 2018-07-09
  • 打赏
  • 举报
回复
16位汇编不支持 add dword ptr ds:[EA], 内存或立即数. 这样的32位运算... 编译错误提示如下:

dd.asm(11) : error A2087: instruction form requires 80386/486

秋水无痕2017 2018-07-09
  • 打赏
  • 举报
回复
你的意思,我大概是明白了。 我先用代码验证一下。如果没问题 晚会贴出代码,有问题还得请求你 !

  • 打赏
  • 举报
回复
引用 2 楼 zb6356030 的回复:
无符号 32位/16位,dx默认存放被除数的高16位,ax默认存放被除数的低16位。除法的结果:商放在ax中,余数放在dx中。ax、dx都是16位的寄存器。


这是div指令的约定,要避免溢出,需要做两次div,商要保存为32位数。
秋水无痕2017 2018-07-09
  • 打赏
  • 举报
回复
无符号 32位/16位,dx默认存放被除数的高16位,ax默认存放被除数的低16位。除法的结果:商放在ax中,余数放在dx中。ax、dx都是16位的寄存器。
  • 打赏
  • 举报
回复
无符号数32/16,就是分两步除,结果商是32位的,余数是16位数。
8088 汇编速查手册 一、数据传输指令 ─────────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里 ) XLAT 字节查表转换. ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) 输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, 其范围是 0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. 4. 标志传送指令. LAHF 标志寄存器传送,把标志装入AH. SAHF 标志寄存器传送,把AH内容装入标志寄存器. PUSHF 标志入栈. POPF 标志出栈. PUSHD 32标志入栈. POPD 32标志出栈. 二、算术运算指令 ───────────────────────────────────────   ADD 加法. ADC 带进加法. INC 加 1. AAA 加法的ASCII码调整. DAA 加法的十进制调整. SUB 减法. SBB 带借减法. DEC 减 1. NEC 求反(以 0 减之). CMP 比较.(两操作数作减法,仅修改标志,不回送结果). AAS 减法的ASCII码调整. DAS 减法的十进制调整. MUL 无符号乘法. IMUL 整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整. DIV 无符号除法. IDIV 整数除法. 以上两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或 商回送AX,余数回送DX, (字运算). AAD 除法的ASCII码调整. CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) 三、逻辑运算指令 ───────────────────────────────────────   AND 与运算. OR 或运算. XOR 异或运算. NOT 取反. TEST 测试.(两操作数作与运算,仅修改标志,不回送结果). SHL 逻辑左移. SAL 算术左移.(=SHL) SHR 逻辑右移. SAR 算术右移.(=SHR) ROL 循环左移. ROR 循环右移. RCL 通过进的循环左移. RCR 通过进的循环右移. 以上八种移指令,其移次数可达255次. 移一次时, 可直接用操作码. 如 SHL AX,1. 移>1次时, 则由寄存器CL给出移次数. 如 MOV CL,04 SHL AX,CL 四、串指令 ───────────────────────────────────────  DS:SI 源串段寄存器 :源串变址. ES:DI 目标串段寄存器:目标串变址. CX 重复次数计数器. AL/AX 扫描值. D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量. Z标志 用来控制扫描或比较操作的结束. MOVS 串传送. ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串比较. ( CMPSB 比较字符. CMPSW 比较字. ) SCAS 串扫描. 把AL或AX的内容与目标串作比较,比较结果反映在标志. LODS 装入串. 把源串中的元素(字或字节)逐一装入AL或AX中. ( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串. 是LODS的逆过程. REP 当CX/ECX0时重复. REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX0时重复. REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX0时重复. REPC 当CF=1且CX/ECX0时重复. REPNC 当CF=0且CX/ECX0时重复. 五、程序转移指令 ───────────────────────────────────────  1>无条件转移指令 (长转移) JMP 无条件转移指令 CALL 过程调用 RET/RETF过程返回. 2>条件转移指令 (短转移,-128到+127的距离内) ( 当且仅当(SF XOR OF)=1时,OP1循环控制指令(短转移) LOOP CX不为零时循环. LOOPE/LOOPZ CX不为零且标志Z=1时循环. LOOPNE/LOOPNZ CX不为零且标志Z=0时循环. JCXZ CX为零时转移. JECXZ ECX为零时转移. 4>中断指令 INT 中断指令 INTO 溢出中断 IRET 中断返回 5>处理器控制指令 HLT 处理器暂停, 直到出现中断或复信号才继续. WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. ESC 转换到外处理器. LOCK 封锁总线. NOP 空操作. STC 置进标志. CLC 清进标志. CMC 进标志取反. STD 置方向标志. CLD 清方向标志. STI 置中断允许. CLI 清中断允许. 六、伪指令 ───────────────────────────────────────   DW 定义字(2字节). PROC 定义过程. ENDP 过程结束. SEGMENT 定义段. ASSUME 建立段寄存器寻址. ENDS 段结束. END 程序结束.
第三章 8086/8088的寻址方式和指令系统 练习题 一.单项选择题 1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为( )。 A.5000H B.5008H C.23008H D.32008H 2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理址为(  )。 A.13000H B.23000H C.33000H D. 3000H 3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为( )。 A.20200H B.30200H C.50200H D.200H 4.指令MOV MEM[BX],AX中的MEM是( )。 A.原码 B.反码 C.补码 D.移码 5.用来作为寄存器间接寻址的寄存器有( )个。 A.8 B.6 C.5 D.4 6.指令MOV [BX+SI],AL中的目的操作数使用( )段寄存器。 A.CS B.DS C.SS D.ES 7.指令MOV BX,[BP+5]中的源操作数使用( )段寄存器。 A.CS B.DS C.SS D.ES 8.段内间接寻址只改变( )中的内容。 A.CS B.IP C.CS和IP D.PSW 9.段间间接寻址只改变( )中的内容。 A.CS B.IP C.CS和IP D.PSW 10.下述指令中不改变PSW的指令是( )。 A.MOV AX,BX B.AND AL,0FH C.SHR BX,CL D.ADD AL,BL 11.下述指令中不影响CF的指令是( )。 A.SHL AL,1 B.INC CX C.ADD [BX],AL D.SUB AX,BX 12.两个整数补码9CH和7AH相加运算后,会产生( )。 A.无溢出且无进 B.无溢出但有进 C.有溢出且有进 D.有溢出但无进 13.指令JMP WORD PTR [BX]属于( )寻址。 A.段内直接 B.段内间接 C.段间直接 D.段间间接 14.指令MOV AX,[BX+SI+8]的源操作数属于( )寻址。 A.直接 B.寄存器相对 C.基址变址 D. 相对基址变址 15.指令( )不改变CF的内容。 A.DEC AL B.ADD AX,CX C.SUB [BX],CL D.SBB AL,DL 16.十进制数字74所对应的压缩型BCD码的形式是( )。 A.74 B.74H C.4AH D.4A 17.十进制数字85所对应的非压缩型BCD码的形式是( )。 A.0085 B.0085H C.0805 D.0805H 18.设AL=67H,执行“CMP AL,76H”后,AL=( )。 A.76H B.0DFH C.67H D.00 19.设AL=65H,BL=29H,执行下列指令后,AL=( )。 ADD AL,BL DAA A.8EH B.94 C.94H D.8E 20.压栈操作是( )数的操作。 A.8 B.16 C.32 D.任意 21.执行IMUL指令时,如果乘积的高部分不是低部分的符号扩展,则( )。 A.OF=0、CF=0 B.OF=0、CF=1 C.OF=1、CF=0 D.OF=1、CF=1 22.设AX=3762H,CL=5,执行“SHR AX,CL”后,AX=( )。 A.0376H B.01BBH C.01BB D.0376 23.若要在BUF缓冲区中寻找与AL中不相等的数据,应使用( )SCASB串操作指令。 A.REPNE B.REP C.REPE D.REPNZ
一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.CPU要访问的某一存储单元的实际地址称(   )   A.段地址         B.偏移地址   C.物理地址        D.逻辑地址 2.某存储单元的物理地址是12345H,可以作为它的段地址有(   )   A.2345H        B.12345H   C.12340H       D.1234H 3.执行后使BX=0的同时也使CF=0,OF=0的指令是(   )   A.XOR BX,BX    B.OR BX,BX   C.AND BX,BX    D.CMP BX,BX 4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是(   )   A.CX≠0且ZF=1    B.CX≠0且ZF=0   C.CX≠0或ZF=1    D.CX≠0或ZF=0 5.在执行DAA指令,当高四BCD码校正时产生进,如要把此进值送入AH中,对这进值的操作应是(   )   A.DAA校正指令的功能已自动加在AH中   B.进值在AF中,校正后根据AF内容再加在AH中   C.进值在CF中,校正后根据CF内容再加在AH中   D.进值在AL最高上,校正后根据AL最高内容再加在AH中 6.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是(   )   A.指令XOR AX,AX执行后,AX内容不变,但设置了标志   B.指令OR DX,1000H执行后,将DX最高置1,其余各置0   C.指令AND AX,OFH执行后,分离出AL低四   D.NOT AX,执行后,将AX清0 7.在执行下列指令时,需要使用段寄存器DS的指令是(   )   A.STOSW        B.ADD AL,CL   C.NEG BX       D.INC DA[BX] 8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是(   )   A.ADD BH,01H     B.OR BH,01H   C.XOR BH,01H     D.TEST BH,01H 9.完成对CL寄存器的内容乘以4的正确操作是(   )   A.ROL CL,1        B.MUL 4     ROL CL,1   C.SHL CL,1        D.MOV CL,2    SHL CL,1             SHL CL,CL 10.下面各传送指令中,正确的是(   )   A.MOV [DI],[SI]            B.MOV[DX+DI],AL   C.MOV WORD PTR [BX],0100H       D.MOV AL,BX 11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法(   )   A.名字的第一个字符可以是大写英文字母及小写英文字母   B.名字的第一个字符可以是字母、数字及、@、_   C.名字的有效长度≤31个字符   D.在名字中不允许出现$ 12.要实现使BETA的值为56,应采用语句为(   )   A.BETA DB 56      B.BETA DB 56H   C.BETA EQU 56      D.BETA EQU 56H 13.REPZ CMPSW指令,重复执行的终止条件是(   )   A.CX=0或ZF=0      B.CX=0且ZF=0   C.CX=0或ZF=1      D.CX=0且ZF=1 14.下面程序段执行后,AL中的内容是(   )   MOV AX,8833H   ADD AL,AH   DAA   A.21       B.21H   C.0C1H      D.0DDH 15.比较两个带符号的数A、B,当A=B时程序转移,测试的条件为(   )   A.ZF=1      B.ZF=0   C.SF=1      D.SF=0 16.检查二个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP AL,BL”指令后应跟的分支指令是(   )   A.JNC LOP1      B.JA  LOP1   C.JC LOP1      D.JGE  LOP1 17.在下列串操作指令中,同时使用源串和目的串地址指针的指令是(   )   A.STOSW      B.LODSW   C.SCASW      D.CMPSW 18.设AL=0AH,下列指令执行后能使AL=05H的是(   )   A.NOT AL         B.AND AL,0FH   C.XOR AL,0FH      D.OR AL,0FH19.DA1  DW‘AB’,‘CD’,‘EF’,‘GH’(   )     ┇    MOV AX,DA1+3  指令执行后AX中的内容是  A.‘EF’   B.‘CD’  C.‘BC’   D.‘FC’20.使用DOS系统功能调用时,使用的软中断指令是(   )  A.INT 21      B.INT 10H  C.INT 16H     D.INT 21H二、填空题(本大题共12空,每空0.5分,共6分)请在每小题的空格中填上正确答案。错填、不填均无分。21.十六进制数0FFF8H表示的十进制正数为________,表示的十进制负数为________。22.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,(SI+COUNT)中,源操作数的有效地址EA为________,其物理地址为________。23.CPU的标志寄存器中标志,可以分为两大类,其中一类称为________标志,另一类称为________标志。24.当标志________=1时表示无符号数运算产生溢出,而当标志________=1是表示带符号数运算产生溢出。25.如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是________,而后两个字节存放的是________。26.在串操作程序中,通常在重复前缀指令REPZ或REPNZ后,选用的串操作指令是________或________才有实际意义。三、简答题(本大题共4小题,每小题2分,共8分)27.已知:BX=1357H,DI=2000H,DS=2000H,CS=4000H,分别指出下面各指令中存储器操作数的物理地址。(1)MOV AL,[BX](2)MOV CS:[BX+DI],AH28.0P1 DB 1,2 0P2 DW 3412H,5678H┇ MOV AX,OP1+1;字单元(OP1+1) AX MOV BL,OP2+1;字节单元(OP2+1) BL 上述二条传送语句有语法错误,请根据注释字段的说明,将其改正。29.下列语句在存储器中分别为变量分配多少字节? (1)AD2 DW 10 DUP(?),10 (2)AD3 DD 100 DUP(?)30.简述下面两条指令分别是什么语法错误? MOV [BX],[SI] MOV AX,DL四、程序分析题(本大题共6小题,每小题6分,共36分)31. MOV DL,AL   NOT DL   TEST DL,04H   JE NEXT        ┇ NEXT:…   若上述程序段执行时产生分支,说明AL中的数第几一定为1?程序段执行后CF是多少?32.DA1  DB‘ABCDEFGHI’  DA2  DB  9 DUP(0)    ┇    LEA SI,DA1    LEA DI,DA2    MOV CX,9    CLD  LOP: LODSB    SUB AL,10H    STOSB    LOOP LOP    . . . 试问:①写出程序执行后DA2各字节中的数据。   ②保持程序功能情况下,程序中 可否改写为 33.已知:BX=4567H   NEG BX   INC BX   NEG BX   DEC BX 程序段执行后,BX=________,CF=________。34.   MOV BL,64H     MOV CL,03H     XOR AX,AX AGAIN:ADD AL,BL    ADC AH,0    DEC CL    JNZ AGAIN 问:(1)该程序段完成的功能是:   (2)AX=________。35.已知数据段中定义 DAT1 DB  12H,34H,56H,78H    MOV CX,0    MOV AX,WORD PTR DAT1    MOV CL,DAT1+3 当程序段执行完后AX=________,CX=________。36.DA1  DB 83H,72H,61H,94H,5AH    ┇     MOV CX,WORD PTR DA1     AND CX,0FH     MOV AL,DA1+3     SHL AL,CL  上述指令序列执行后,AL=_______,CL=_______。五、程序填空题(本大题共2小题,每小题6分,共12分)37.在NUMW单元存放有一个0-65535范围内的整数,将该数除以500,商和余数分别存入QU1和REM单元,请在空行处各填上一条指令完善该程序。   ┇ MOV AX,NUMW _____________ XOR DX,DX DIV BX MOV QUI,AX  _____________38.某程序欲用单个字符显示的2号功能调用去显示STRING中的字符串‘COMPUTER’(不显示字符‘$’!).试在空白处填上适当的一条指令。 STRING DB‘COMPUTER’,‘$’ ┇ MOV BX,0FFSET STRING LOP:MOV DL,[BX]    MOV AH,02H    INT 21H    ____________________    ____________________    JNE LOP六、编程序题(本大题共2小题,第39小题6分,第40小题12分,共18分)39.试编制一程序段,用串操作指令实现以DA_BY为首址的20H个字节单元中存放相同字符‘Y’(设DA_BY存储区已有ES指向)。40.试编制一源程序,统计DA1字单元中含0的个数,如统计的个数为奇数,则将进置1,否则进清0。    DATA  SEGMENT    DA1  DW  XXXX    DATA ENDS2006年10月汇编语言程序设计试题答案  来源: http://www.csai.cn 2006年10月汇编语言程序设计试题答案一、1、C;2、D;3、A;4、B;5、C;6、C;7、D;8、B;9、C;10、C;11、B;12、C;13、A;14、B;15、A16、C;17、D;18、C;19、D;20、B二、21、+65528;-3276022、20A8H;11488H23、状态;控制24、CF;OF25、IP;CS26、STOS;CMP三、27、(1)21357H;(2)43357H28、MOV AX,WORD PTR(OP1+1)    MOV BL,BYTE PTR(OP2+1)29、(1)22;(2)40030、MOV指令不能在两个存储器操作数之间进行;    操作数类型不匹配四、31、第2;CF=032、123456789;不能更改33、BX=4565H;CF=134、AX=012CH,将AX内容乘3送BX中35、AX=3412H,CX=0078H36、AL=0A0H,CL=03H五、37、MOV BX,500    MOV REM,DX38、INC BX    CMP [BX],24H六、39、LEA DI,DA_BY        MOV CX,32        MOV AL,‘Y’        CLD        REP STOSB40、CODE SEGMENT          ASSUME CS:CODE,DS:DATA       START: MOV  AX,DATA              MOV  DS,AX              LEA  SI,DA1              MOV  CX,16              XOR BL,BL       AGAIN: MOV  AL,[SI]              HL AL,1              JC NEXT              INC BL        NEXT:INC SI              LOOP AGAIN              TEST BL,01H              JNE  L1              CLC              JMP DONE           L1: STC         DONE: MOV AH,4CH               INT 21H         CODE ENDS              END START  
51汇编语言指令集 符号定义表 符号 含义 Rn R0~R7寄存器n=0~7 Direct 直接地址,内部数据区的地址RAM(00H~7FH) SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0 @Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8常数 #data16 16常数 Addr16 16的目标地址 Addr11 11的目标地址 Rel 相关地址 bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的 指令介绍 指令 字节 周期 动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器 2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器 3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器 4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进C相加,结果存回累加器 6.ADDC A,direct 2 1 将累加器与直接地址的内容及进C相加,结果存回累加器 7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进C相加,结果存回累加器 8.ADDC A,#data 2 1 将累加器与常数及进C相加,结果存回累加器 9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借C,结果存回累加器 10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借C,结果存回累加器 11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借C,结果存回累加器 12.SUBB A,0data 2 1 将累加器的值减常数值减借C,结果存回累加器 13.INC A 1 1 将累加器的值加1 14.INC Rn 1 1 将寄存器的值加l 15.INC direct 2 1 将直接地址的内容加1 16.INC @Ri 1 1 将间接地址的内容加1 17.INC DPTR 1 1 数据指针寄存器值加1 说明:将16的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志 18.DEC A 1 1 将累加器的值减1 19.DEC Rn 1 1 将寄存器的值减1 20.DEC direct 2 1 将直接地址的内容减1 21.DEC @Ri 1 1 将间接地址的内容减1 22.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低字节存回累加器,高字节存回B寄存器 说明:将累加器A和寄存器B内的无符号整数相乘,产生16的积,低字节存入A,高字节存入B寄存器。如果积大于FFH,则溢出标志(OV)被设定为1,而进标志为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器 说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进(C)及溢出(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整, 若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或 (C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器 26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器 27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器 28.ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判断,结果存回累加器 29.ANL direct,A 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址 30.ANL direct,#data 3 2 将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址 31.ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器 32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器 33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器 34.ORL A,#data 2 1 将累加器的

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧