名称:divdw
进行不会yi出的除法运算,被除数dword型除数word型结果dword
参数:ax=dword型的底16位
dx=dword型的高16位
返回:dx=结果的高16位
ax=结果的底16位
cx=余数
计算1000000/10(F4240H/0AH)
------解决方案--------------------------------------------------------
你是在做王爽老师汇编书里的题目吧.
自己写的.注释混乱,将就着看;)
assume cs:codesg
datasg segment
dw 32 dup(0)
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov si,0
mov ax,4240h
mov dx,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw:
push si
push bx
mov [si],ax ;save L
mov ax,dx
mov dx,0h
div cx
mov [si+2],dx ;save rem(H/N)
mov bx,1000h ;cut 65536 for 1000h and 10h
mul bx
mov [si+4],dx ;保存int(H/N)*1000h的商的高16位
mov bx,10h
mul bx
mov [si+6],dx ;保存int(H/N)*1000h的低16位乘10h的商的高16位
mov [si+8],ax ;保存int(H/N)*1000h的低16位乘10h的商的低16位(暨int(H/N)*65536的商的低16位)
mov ax,[si+4] ;提取int(H/N)*1000h的商的高16位
mul bx
add ax,[si+6]
mov [si+10],ax ;保存int(H/N)*65536的高16位
mov ax,[si+2] ;提取rem(H/N)
mov bx,1000h
mul bx
mov [si+12],dx ;保存rem(H/N)*1000h的商的高16位
mov bx,10h
mul bx
mov [si+14],ax ;保存renm(H/N)*1000h的商的低16位乘10h的商的低16位
mov [si+16],dx ;保存rem(H/N)*1000h的商的低16位乘10h的商的高16位
mov ax,[si+12]
mul bx
add ax,[si+16]
mov dx,ax ;保存rem(H/N)*65536的商的高16位
mov ax,[si+14] ;提取rem(H/N)*65536的商的低16位
add ax,[si] ;rem(H/N)*65536的商的低16位加L
div cx
mov cx,dx
mov dx,[si+10]
add ax,[si+8]
pop bx
pop si
ret
codesg ends
end start
------解决方案--------------------------------------------------------
帮顶,混个脸熟!