永发信息网

问一个关于汇编的问题

答案:1  悬赏:10  手机版
解决时间 2021-07-21 00:17
  • 提问者网友:骨子里的高雅
  • 2021-07-20 11:03

下面是一个将十进制数每两个转换为一个压缩的BCD码,如何将转化结果输出啊?本人刚学,忘各位大侠赐教!!!如果用 MOV AH,2输出应该放在哪啊?

DATAS SEGMENT
ASC DB 31H,32H,33H,34H,35H,36H
COUNT EQU ($-ASC)/2 ;定义转换次数常量
BCD DB COUNT DUP(?) ;空出单元
DATAS ENDS

STACKS SEGMENT
DB 200 DUP(0)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,OFFSET ASC ;ASCII码表地址
MOV DI,OFFSET BCD ;BCD码存放地址
MOV CX,COUNT ;转换次数
AGAIN:MOV AL,[SI] ;取一字节
SHL AL,1 ;左移四位,为了不占用CL,用四句SHL实现
SHL AL,1
SHL AL,1
SHL AL,1
MOV BL,[SI+1] ;取下一字节
AND BL,0FH ;高4位置0
ADD AL,BL ;组合起来
MOV [DI],AL ;存结果
INC SI ;修改SI
INC SI
INC DI ;修改DI
LOOP AGAIN ;修改至完全转换
MOV AH,4CH
INT 21H
CODES ENDS
END START


最佳答案
  • 五星知识达人网友:执傲
  • 2021-07-20 11:46
在你的

LOOP AGAIN ;修改至完全转换



MOV AH,4CH

之间插入以下代码



mov si, 3 ; 循环3次

mov cl, 4 ; 用来移位

mov ah, 2 ; 2号功能输出dl里的字符

lea di, BCD

next:

mov bl, [di]



rol bl, cl ; 输出高4位的字符

mov dl, bl

and dl, 0fh

or dl, 30h

int 21h



rol bl, cl ; 输出低4位的字符

mov dl, bl

and dl, 0fh

or dl, 30h

int 21h



inc di

dec si

jz done

jmp next



done:
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯