z=((x+y)*5-y)/2 ,x=16 y=4.用汇编语言编写并能显示结果,最好有每一步的详细解释谢谢了。。
1个回答
2013-11-28
展开全部
assume cs:code, ds:datas
datas segment
sdMsg db '((16+4)*5-4)/2=$' ; 一个字符串
datas ends
code segment
start: mov ax, datas ; 以下2句初始化数据段
mov ds, ax
lea dx, sdMsg ; 把sdMsg的地址送给dx
mov ah, 9 ; 9号功能调用,输出以$结尾字符串
int 21h
mov ax, 16 ; ax = 16
mov bx, 4 ; bx = 4
add ax, bx ; ax = 16 + 4 = 20
mov cl, 5 ; cl = 5
mul cl ; ax = 20 * 5 = 100
sub ax, bx ; ax = 100 - 4 = 96
shr ax, 1 ; ax = 96 / 2 = 48
xor dx, dx ; dx:ax存储数据,dx没用,所以清空dx
call show ; 调用显示子过程
mov ax, 4c00h ; 结束程序
int 21h
show: mov cx, 10 ; cx = 10
cmp ax, 0 ; ax = 0则结束过程
jle done
div cx ; ax = ax / cx
push dx ; 余数在dx里
xor dx, dx ; 清空dx为下一次计算做准备
call show ; 下一次计算
pop dx ; 获得上次保存的余数
or dl, 30h ; or 30h使之对应ascii码的'0'~'9'
mov ah, 2 ; 2号功能调用,输出dl里的字符
int 21h
done: ret
code ends
end start
datas segment
sdMsg db '((16+4)*5-4)/2=$' ; 一个字符串
datas ends
code segment
start: mov ax, datas ; 以下2句初始化数据段
mov ds, ax
lea dx, sdMsg ; 把sdMsg的地址送给dx
mov ah, 9 ; 9号功能调用,输出以$结尾字符串
int 21h
mov ax, 16 ; ax = 16
mov bx, 4 ; bx = 4
add ax, bx ; ax = 16 + 4 = 20
mov cl, 5 ; cl = 5
mul cl ; ax = 20 * 5 = 100
sub ax, bx ; ax = 100 - 4 = 96
shr ax, 1 ; ax = 96 / 2 = 48
xor dx, dx ; dx:ax存储数据,dx没用,所以清空dx
call show ; 调用显示子过程
mov ax, 4c00h ; 结束程序
int 21h
show: mov cx, 10 ; cx = 10
cmp ax, 0 ; ax = 0则结束过程
jle done
div cx ; ax = ax / cx
push dx ; 余数在dx里
xor dx, dx ; 清空dx为下一次计算做准备
call show ; 下一次计算
pop dx ; 获得上次保存的余数
or dl, 30h ; or 30h使之对应ascii码的'0'~'9'
mov ah, 2 ; 2号功能调用,输出dl里的字符
int 21h
done: ret
code ends
end start
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |