汇编语言 除法指令

Posted ʚVVcatɞ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言 除法指令相关的知识,希望对你有一定的参考价值。

除法指令

  • DVI无符号数除法指令

  • 指令格式:DIV 源

  • 指令功能:对两个无符号二进制数进行除法操作。源操作数可以是字或字节。

  • 如果源操作数为字节,16位被除数必须放在AX中,8位除数为源操作数,它可以是寄存器或存储单元。相除之后,8位商在AL中,余数在AH中。即

    AL ← AX/源(字节)的商
    AH ← AX/源(字节)的余数

  • 要是被除数只有8位,必须把它放在AL中,并将AH清0,然后相除。

  • 如果源操作数为字,32位被除数在DX、AX中,其中,DX为高位字,16位除数作源操作数,它可以是寄存器或存储单元。相除之后,AX中存16位商,DX中存16位余数。即

    AX ← (DX, AX)/源(字)的商
    DX ← (DX,AX)/源(字)的余数

  • 要是被除数只有16位,除数也是16位,则必须将16位被除数送到AX中,再将DX寄存器清0,然后相除。

  • 与被除数和除数一样,商和余数也都为无符号数。DIV指令执行后,所有标志均无定义。

; 以下程序实现 1001 ÷ 100 的结果
assume cs:code, ds:data, ss:stack

data segment
		db 256 dup(0)
data ends


stack segment stack
			db 128 dup(0)
stack ends


code segment

start:		
			mov ax, stack
			mov ss, ax
			mov sp, 128
			
			mov ax, 1001
			mov bl, 100
			div bl
			
			
			mov ax, 4C00H
			int 21					
code ends

end start

代码执行结果:
在这里插入图片描述

; 以下程序实现 100001 ÷ 100 的结果
assume cs:code, ds:data, ss:stack

data segment
		dd  	100001
		dw      1
		db      1
data ends


stack segment stack
			db 128 dup(0)
stack ends


code segment

start:		
			mov ax, stack
			mov ss, ax
			mov sp, 128
			
			mov ax, data
			mov ds, ax
			
			mov ax, ds:[0]
			mov dx, ds:[2]
			
			mov bx, 100
			div bx
			
			
			mov ax, 4C00H
			int 21					
code ends

end start

代码执行结果:

在这里插入图片描述

; 以下程序使用 word ptr 实现 1232131 ÷ 100 的结果
assume cs:code, ds:data, ss:stack

data segment
		dd  	1232131  ;  dd 占用4个字节
		dw      100      ; dw  占用 2个字节
		db      1        ; db 占用一个字节
data ends


stack segment stack
			db 128 dup(0)
stack ends

code segment

start:		
			mov ax, stack
			mov ss, ax
			mov sp, 128
			
			mov ax, data
			mov ds, ax
			
			mov ax, ds:[0]
			mov dx, ds:[2]
			
			div word ptr ds:[4]
			
			mov ax, 4C00H
			int 21					
code ends

end start

在这里插入图片描述

总结:

  1. 除数:8bit或16bit 存在内存单元中或者寄存器中

  2. 被除数:存放在AX或者 AX和DX中
    如果除数为8bit,被除数则为16bit,存放在AX中
    如果除数为16bit,被除数则为32bit,AX存放低16bit,DX存放高16bit

  3. 结果:如果除数为8bit,则AL 存商,AH存放余数
    如果除数为16bit,则AX存放商,DX存放余数

以上是关于汇编语言 除法指令的主要内容,如果未能解决你的问题,请参考以下文章

STM32 M0和M3内核单片机做浮点除法运算和整型除法运算,分别的用时。希望能给大概数据参考。

C语言必会面试题(3耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)(代码片段

逆向课程第四讲逆向中的优化方式,除法原理,以及除法优化上

8086汇编 中断

8086汇编 中断

同时除法和取余数?