data segment
w dw -304 ;要以2进制的补码形式出现,下同
x dw 1000
y dw -12
z dw 20
result dw 2 dup(?)
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov ax,x
imul y ; 有符号的乘法,默认在AL或AX中,AL中时,乘积在AX中,AX中时,乘积在DX,AX中
mov cx,ax ;只是将AX的位置空出来,以备后用,下同
mov bx,dx
mov ax,z ;AX中的是16位,用于字扩展成双字,之后为32位,后面的一样
cwd
add cx,ax ;普通加法
adc bx,220 ;进位加法
sbb bx,0 ;普通减法
mov ax,w
cwd
sub ax,cx
sbb dx,bx ; 借位减法
idiv x ; 有符号的除法
mov result+2,dx ; 将结果存入从RESULT加2开始的内存单元中
mov ah,4ch ;功能调用
int 21h ; 产生中断
code ends
end start
如有不足,敬请指正,谢谢!
w dw -304 ;要以2进制的补码形式出现,下同
x dw 1000
y dw -12
z dw 20
result dw 2 dup(?)
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov ax,x
imul y ; 有符号的乘法,默认在AL或AX中,AL中时,乘积在AX中,AX中时,乘积在DX,AX中
mov cx,ax ;只是将AX的位置空出来,以备后用,下同
mov bx,dx
mov ax,z ;AX中的是16位,用于字扩展成双字,之后为32位,后面的一样
cwd
add cx,ax ;普通加法
adc bx,220 ;进位加法
sbb bx,0 ;普通减法
mov ax,w
cwd
sub ax,cx
sbb dx,bx ; 借位减法
idiv x ; 有符号的除法
mov result+2,dx ; 将结果存入从RESULT加2开始的内存单元中
mov ah,4ch ;功能调用
int 21h ; 产生中断
code ends
end start
如有不足,敬请指正,谢谢!