Assembly 如果不使用写十六进制,如何将十进制数转换为十六进制
编写将十进制数转换为十六进制数的程序。 要将十进制数转换为十六进制数,我们发现16的最大幂小于等于。 我们从1开始,比较N和1Assembly 如果不使用写十六进制,如何将十进制数转换为十六进制,assembly,x86,hex,Assembly,X86,Hex,编写将十进制数转换为十六进制数的程序。 要将十进制数转换为十六进制数,我们发现16的最大幂小于等于。 我们从1开始,比较N和1 If 1 < N we try 16 if 16 < N we try 256 然后我们通过逐次除法进行转换 Ex convert 834 to hex 834/256 = 3 + r 78 78/16 = 4 + r 14 14/1 = E + r0 十六进制数是34Eh 如果第一个数字是一个字母,你可以不带前导零,
If 1 < N we try 16
if 16 < N we try 256
然后我们通过逐次除法进行转换
Ex convert 834 to hex
834/256 = 3 + r 78
78/16 = 4 + r 14
14/1 = E + r0
十六进制数是34Eh
如果第一个数字是一个字母,你可以不带前导零,但是0AB3h比AB3h好。但是,您必须将h作为答案的最后一部分
mov edx,offset msg
call writestring
call readint
mov tempt1,eax
div eax
.if(tempt<1)
mov eax,16
.elseif()
.else
.endif
ret
mov edx,偏移量msg
通话记录
调用readint
mov1,eax
略过除错指令
.if(尝试如果您从转换为二进制开始,这很容易
我假设您的输入字符串是ascii(对于bcd,您可以使用ommit第一个减法。)
将保留寄存器设置为0
从最低有效位减去“0”(要转换为bcd的字符)开始
将数字乘以10^n,其中n是它的位置
将数字添加到临时寄存器中
重复,直到完成
现在,每个字节包含8位或两个半字节,每个半字节相当于一个十六进制数字。复制该字节并使用0xf将其转换为低半字节
如果大于9,则添加“@”(在A之前)
否则添加“0”
将保留寄存器位移4以获取下一个数字
循环直到您的保留寄存器为空
有人能建议怎么做吗?我只知道如何除数,但如何得到余数?欢迎来到StackOverflow。这不是一个为我做家庭作业的网站。请给我们一些证据,证明你至少尝试过。我已经添加了起始代码,但我迷路了。不知道下一步该怎么做。无需使用div
x SHR 4
是x/16
和x和15
是x%16
。
mov edx,offset msg
call writestring
call readint
mov tempt1,eax
div eax
.if(tempt<1)
mov eax,16
.elseif()
.else
.endif
ret