这段是转十进制输出的指令,大佬请求详细的解释
答案:1 悬赏:0
解决时间 2021-01-26 16:49
- 提问者网友:人生佛魔见
- 2021-01-26 10:17
这段是转十进制输出的指令,大佬请求详细的解释
最佳答案
- 二级知识专家网友:孤独入客枕
- 2021-01-26 10:37
自己稍微分析一下就明白了。
mov bx, 10 ;除10做准备
xor cx, cx ;cx 计数器清0
Q0:
xor dx, dx ;16位除法,DX:AX / BX ->(ax)商,(dx)余数,所以dx清0
div bx ; DX:AX组成的数,除10
or dx, 0e30h ; 把dx中的数与0e30h做or操作,dh=0x0e,这是为调用int 10输出(al)中的字符做准备
; dl-> 30h+(dl),把数值转成ascII码
push dx ; dx压栈(注意,先入栈的,是除数中的低位)
inc cx ;计数器+1
cmp ax, 0 ;商是否等于0,等于0,说明除尽了。
jnz Q0 ;商不等于0, 则继续下一次除10操作
Q1: pop ax ;把之前保存的结果,弹出到ax中
int 10h ;int 10h, (ah=0eh),把(al)中的ascII输出到屏幕
loop Q1 ;循环
补充一下:
看汇编代码的时候,脑子里要根据代码模拟计算机的寄存器中数据的变化,与高级语言不同,汇编是与数据密切相关的,这样看代码,会让你更快的深入汇编。
mov bx, 10 ;除10做准备
xor cx, cx ;cx 计数器清0
Q0:
xor dx, dx ;16位除法,DX:AX / BX ->(ax)商,(dx)余数,所以dx清0
div bx ; DX:AX组成的数,除10
or dx, 0e30h ; 把dx中的数与0e30h做or操作,dh=0x0e,这是为调用int 10输出(al)中的字符做准备
; dl-> 30h+(dl),把数值转成ascII码
push dx ; dx压栈(注意,先入栈的,是除数中的低位)
inc cx ;计数器+1
cmp ax, 0 ;商是否等于0,等于0,说明除尽了。
jnz Q0 ;商不等于0, 则继续下一次除10操作
Q1: pop ax ;把之前保存的结果,弹出到ax中
int 10h ;int 10h, (ah=0eh),把(al)中的ascII输出到屏幕
loop Q1 ;循环
补充一下:
看汇编代码的时候,脑子里要根据代码模拟计算机的寄存器中数据的变化,与高级语言不同,汇编是与数据密切相关的,这样看代码,会让你更快的深入汇编。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯