永发信息网

高手帮忙解释一个十进制转十六进制的汇编程序

答案:2  悬赏:0  手机版
解决时间 2021-07-31 20:05

我刚开始学习汇编,很多不懂,下面这个是十进制转十六进制的汇编程序,能正确运行,但是有很多地方不懂,谁能帮忙解释下代码.
data segment
str db 0ah,0dh
num db 4 dup(?),'H$'
tab db '0123456789ABCDEF'
data ends
code segment
assume cs:code,ds:data
begin: mov ax,data
mov ds,ax
xor bx,bx
mov cx,10
next: mov ah,1
int 21h
cmp al,0dh
jz conv
push ax
mov ax,bx
mul cx
mov bx,ax
pop ax
and al,0fh
xor ah,ah
add bx,ax
jmp next
conv: mov ax,bx
mov ch,4
lea bx,tab
mov cl,4
lea si,num
lopa: rol ax,cl
push ax
and ax,000fh
mov [si],al
inc si
pop ax
dec ch
jnz lopa
lea dx,str
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end begin

顺便帮忙说下该段代码十进制转十六进制的思路吗 麻烦大家了

最佳答案
你这个代码还有点问题,帮你改了,黑子部分是添加的代码,否则无法看到结果:

data segment
str db 0ah,0dh
num db 4 dup(?),'H$'
tab db '0123456789ABCDEF'
data ends

code segment
assume cs:code,ds:data
begin:
mov ax,data
mov ds,ax
xor bx,bx
mov cx,10

next:
mov ah,1 ;1号功能从键盘读入字符
int 21h
cmp al,0dh ;如果=13也就是回车则跳到conv进行转换
jz conv

push ax ;暂存ax
mov ax,bx ;bx存当前已有的数值,这里叫唤是为了用mul
mul cx ;bx=bx*10
mov bx,ax ;以下2句还原状态
pop ax
and al,0fh ;这是把'1'转换成1的动作
xor ah,ah ;清空高位
add bx,ax ;相加
jmp next ;继续读取下个字符

;这一段程序用伪代码描述大概是
;cx = 10
;bx = 0
;next:
;ah = 读入字符
;if ah = 回车 goto conv
;bx = bx*cx + ah-'0'
;goto next
;conv:

conv:
mov ax,bx ;bx里存的是输入的10进制数
mov ch,4
lea bx,tab ;bx保存16进制字符表的基址
mov cl,4
lea si,num ;num是转换后存16进制字符的地方

lopa:
rol ax,cl ;ax左移动4位,由于是rol,所以高4位移到低4位
push ax ;暂存
and ax,000fh ;取出低4位,也就是高4位移过来位
mov di, ax ;查表
mov al, [bx+di]
mov [si],al ;存储
inc si ;下个位置
pop ax ;还原状态
dec ch ;ch=ch-1
jnz lopa ;if ch != 0 goto lopa
;这一段的工作原理是分别取出ax的每个4位二进制元组(也就对应了一位16进制数)
;然后利用bx查表,把查到的字符存入num
;比如ax = 1111 1010 0010 1000
;那么循环4次分别得到1111B=Fh,1010B=Ah,0010B=2h,1000=8h
;所以最后num里存的也就是FA28H了
;rol ax, cl(=4)是把ax的高4位,比如这里的1111,旋转到低4位
;所以第一次rol ax, cl后便得到1010 0010 1000 1111

lea dx,str ;输出
mov ah,9
int 21h

mov ah,4ch
int 21h
code ends
end begin
全部回答
十进制转十六进制就是拿十进制除16 把每次余数记录 除数继续除16直到为0位置 tab db '0123456789ABCDEF' 以每次除到的余数为偏移量 来查找以上数据段 就可以显示出16进制的表示形式了 这段代码也就是这么做的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
火车票区间的问题
3GQQ幻想西游请问高手!游戏里面的任务做与不
帮我给一个小男孩起个名字
我的桌面被恶意篡改了!
腾讯游戏 转区后,礼包还能不能领.
陕县三门峡金泉宾馆我想知道这个在什么地方
泉州地区哪里有纯种的马尔济斯犬卖?
刨腹产以后多久才能要宝宝
请教下穿衣达人我买了件粉紫色外套皮衣,问下
一个容积式250立方厘米的瓶内有130g水,有一
波斯湾石油运送到欧洲经过哪两大洋
谁知道迅速增肥的方法?告诉我好吗
香坊区哈尔滨东北林业大学-学习广场地址在什
魔兽世界里LR的一键宏
QQ炫舞自定义戒指上的字(魏 、 慧 ),谁会做
推荐资讯
魏都区许昌速味居黄焖鸡米饭地址在哪,我要去
苹果怎么设置访问限制,苹果6允许访问摄像头怎
请大家给我一些关于买PSP300还是买PSPGO的建
急急急 QQ爱墙的种子
怎么样才可以哭的无所谓
经典优美语句摘抄大全,小说中的经典,唯美的
找一部科幻大片?
怎样在电脑上下载歌曲到手机上
wow猎人(射击天赋)打FB 技能怎么用?、
一般到几月份开空调,夏季公司办公室不让开空
西工区洛阳好来宾馆这个地址怎么能查询到,着
张力尹《晴天,雨天》资源
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?