汇编语言 除法指令
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
总结:
-
除数:8bit或16bit 存在内存单元中或者寄存器中
-
被除数:存放在AX或者 AX和DX中
如果除数为8bit,被除数则为16bit,存放在AX中
如果除数为16bit,被除数则为32bit,AX存放低16bit,DX存放高16bit -
结果:如果除数为8bit,则AL 存商,AH存放余数
如果除数为16bit,则AX存放商,DX存放余数
以上是关于汇编语言 除法指令的主要内容,如果未能解决你的问题,请参考以下文章
STM32 M0和M3内核单片机做浮点除法运算和整型除法运算,分别的用时。希望能给大概数据参考。
C语言必会面试题(3耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)(代码片段