问题描述
首先,这是家庭作业.
我正在尝试将5位数字读入寄存器bx.假定该数字不大于65535(16位).以下是我尝试这样做的方法.
I'm trying to read a 5 digit number into the register bx. The number is assumed to be no greater than 65535 (16 bits). Below is how I am attempting to do so.
但是,当我尝试打印数字时,我仅打印输入的最后一位数字.这使我猜测,当我向bx添加另一个数字时,它会覆盖先前的数字,但是我看不到问题所在.任何帮助将不胜感激,我几乎可以肯定它是我忽略的小东西:-/
However, when I attempt to print the number, I am only printing the very last digit that was entered. Which leads me to guess that when I add another number to bx it is overwriting the previous number, but I am unable to see the problem. Any help would be appreciated, I'm almost certain that it is something small I'm overlooking :-/
mov cx,0x05 ; loop 5 times
mov bx,0 ; clear the register we are going to store our result in
mov dx,10 ; set our divisor to 10
read:
mov ah,0x01 ; read a character function
int 0x21 ; store the character in al
sub al,0x30 ; convert ascii number to its decimal equivalent
and ax,0x000F ; set higher bits of ax to 0, so we are left with the decimal
push ax ; store the number on the stack, this is the single digit that was typed
; at this point we have read the char, converted it to decimal, and pushed it onto the stack
mov ax,bx ; move our total into ax
mul dx ; multiply our total by 10, to shift it right 1
pop bx ; pop our single digit into bx
add bx,ax ; add our total to bx
loop read ; read another char
推荐答案
使用MUL操作码时,会有三种不同的结果:
When using the MUL opcode, there are three different results:
- 8位-结果存储在斧头中
- 16位-结果存储在dx:ax中
- 32位-结果存储在edx:eax
- 8 bit - results are stored in ax
- 16 bit - results are stored in dx:ax
- 32 bit - results are stored inedx:eax
因此,当您执行乘法运算时,在您的情况下,指令将dx覆盖为零.这意味着对mul操作码的每次后续使用都乘以零.
So when you perform your multiplication, the instruction overwrites dx with zero in your case. This means that each subsequent use of the mul opcode is multiplying by zero.
这篇关于将十进制转换为十六进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!