失落传说 发表于 2014-4-23 22:16:33

程序段求完善

寄存器BX中有4位0~9的十六进制数,编写程序段,将其转换为对应字符(即ASCII码),按从高到底的顺序分别存入L1,L2,L3,L4四个字节单元中。


我的程序段如下:

MOV CL,4

MOV AL,BL
AND AL,0FH
CMP AL,0AH
JC DIGT4
ADD AL,7
DIGT4:ADD AL,30H
MOV L4,AL

MOV AL,BL
SHR AL,CL
CMP AL,0AH
JC DIGT3
ADD AL,7
DIGT3:ADD AL,30H
MOV L3,AL

MOV AL,BH
AND AL,0FH
CMP AL,0AH
JC DIGT2
ADD AL,7
DIGT2:ADD AL,30H
MOV L2,AL

MOV AL,BH
SHR AL,CL
CMP AL,0AH
JC DIGT1
ADD AL,7
DIGT1:ADD AL,30H
MOV L1,AL


老师说我的程序段有问题,但是我不知道怎么改,求大神完善!~

testa001 发表于 2014-4-24 09:20:04

第一段比较跳转后的add al,7是何意思?题意是4位数都是0-9的,比较出来不是0-9的应该是不符合题意的,理应放弃转换程序跳转到下一个位继续比较,楼主为何要做add转换成0-9?这个也是不符合题意的,题目上没说要让你把不是0-9的转换为0-9,确实有点问题,而且没有任何注释,让读的人自己猜测你的想法,有点烦人:sad

vkevke_3437 发表于 2014-4-24 10:39:19

mov cx,4
s:
        push cx               
        mov cl,4
        rol bx,cl
        pop cx               
mov al,bl
and al,ofh
cmp al,0ah
jc num
add al,7h
num:add al,30h
push ax                                ;入栈是从高到低
loop s
                                        ;出栈是从低到高
pop ax
mov L4,al
pop ax
mov L3,al
pop ax
mov L2,al
pop ax
mov L1,a1

失落传说 发表于 2014-4-27 14:20:03

testa001 发表于 2014-4-24 09:20 static/image/common/back.gif
第一段比较跳转后的add al,7是何意思?题意是4位数都是0-9的,比较出来不是0-9的应该是不符合题意的,理应放 ...

最近考试多没有上来看帖子,抱歉哈。你这么一说,我才发现我做了无用功。这程序段是我在作业本上打上来的,所以就没做了注释。总之谢谢你啦~:lol:

失落传说 发表于 2014-4-27 14:22:37

vkevke_3437 发表于 2014-4-24 10:39 static/image/common/back.gif
mov cx,4
s:
        push cx               


一楼这么一说,确实是不用加上7H了,用出入栈的方法很好啊,学习到了:victory:
页: [1]
查看完整版本: 程序段求完善