注册 登录
编程论坛 汇编论坛

[讨论]还是这个问题:二进制转化为八进制

曾小 发布于 2006-12-29 19:04, 1329 次点击
看过story 的程序觉得不行,看过各位的解释还是不明白.
还请各位帮帮忙,再写写.
谢谢!!!!!!!!!!
2 回复
#2
lefttime2006-12-30 20:12

我不知道你要的是字节转换还是字转换,来个字转换的吧:
这里已经定义好了一个数,当然还可以通过输入
DSEG SEGMENT
NUM DW 123
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
MAIN: MOV AX,DSEG
MOV DS,AX
MOV CX,0503H ;应该都知道通过8421码换算二--十六进制,转换八进制,是取3位为一换成一位八进制数
而寄存器普遍不是3的整数位长,而取3位都必须从低位开始取,如果我们是先取低位的话
虽然容易,但会出现倒序输出,所以在这里先进行了高位,去除最高位1位后,剩下的就可
正常取啦
MOV AH,2
MOV BX,NUM
ROL BX,1 ;先取第1位,具体看最后说明
MOV DX,BX
AND DX,1 ;只有一位,所以其余高位清零
OR DL,30H ;转ASCII码
INT 21H
NEXT: ROL BX,CL ;开始正常取3位数转换
MOV DX,BX
AND DX,7 ;因为只最低3位有效,所以和7进行逻辑与,清零其余高位
OR DX,30H
INT 21H
DEC CH
CMP CH,0 ;统计取3位的次数
JNZ NEXT
MOV AX,4C00H
INT 21H
CSEG ENDS
END MAIN

例中的123形式为 1111011,在寄存器中的存放为 0000000001111011,如果每次取3位该从最低位开始,分成这样
0 000 000 001 111 011,最高位只能取1位,所以为了正常输出,从最高位取,必然先移位的是次数为1,其余便可正常
移位

#3
曾小2006-12-31 19:07
我明白了
1