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

[求助]十六进制问题

棋泣卡 发布于 2006-04-29 20:14, 1238 次点击

使用汇编语言编写过程
.MODEL SMALL
.CODE
PRINT_A_Z PROC
MOV DL,’A’
MOV CX,1A


PRINT_LOOP:
CALL WRITE_CHAR
INC DL ;
LOOP PRINT_LOOP
MOV AH,4Ch
INT 21h
PRINT_A_Z ENDP

WRITE_CHAR PROC
MOV AH,2

INT 21h
RET
WRITE_CHAR ENDP
END PRINT_A_Z

程序里的h告诉汇编程序它前面是一个十六进制数。与DEBUG不一样,DEBUG假定所有的数是十六进制数,而汇编程序假定所有的数是十进制数,但是当在这里MOV CX,1A 没有加h 时运行结果是ABCDEFGHIJKLMNOPQRST加h后就是ABCDEFGHIJKLMNOPRSTUVWXYZ这是为什么?1A在十六进制里相当于十进制的26没加h为什么就是20呢??

10 回复
#2
忧伤的飞鸟2006-04-30 12:46
没加h就默认为10进制。1A相当于是10加10,就是20了。
#3
棋泣卡2006-04-30 23:14

这样
#4
公子吕2006-05-06 11:03
忧伤的飞鸟
你用的是什么汇编器,按你那么说十进制的A=10,B=11.....如果有标号0ABC怎么办?
masm5 在默认十进制情况下认为1A是标号,书上也是这么说的.
欢迎继续讨论,不过千万别误导别人
#5
棋泣卡2006-05-09 23:21
到底是怎么回事?
#6
xxygdufs2006-05-13 12:35
而且A-F不是用来表示十六进制的吗
#7
公子吕2006-05-13 13:08
A-F是当然是用来表示16进制的,但是必须在后面加上H,且以A-F开头的数字要在前面加0. 如:0FFFFH
#8
棋泣卡2006-05-13 22:11
没加h的时候是什么,例如1A没加H的时候是多少?谢谢
#9
公子吕2006-05-14 10:34
忧伤的飞鸟 说的是对的,道歉!

这个问题具体到汇编器是有差异的.

8086汇编教科书上认为 1A没有加H的时候就是一个标识符.而不表示任何数字(当然debug中1A不用加H就表示16进制) 如果你汇编的源程序里面没有下面这样的声明语句masm5是要报错的:

1A db/dw... ?
1A label word...
1A equ ...
1A: mov ...

但是在MS的32位汇编器ML中,1A是作为integer处理的,并且确实等于20.当然标识符的声明也就要多一个限制了:不能以数字开头.
#10
忧伤的飞鸟2006-06-02 13:38
   没事,问题提出来就是要大家解决的嘛,错了就说出来呀.
#11
云中雾2006-06-04 10:24

毕竟大家用的汇编编译器不一样的,有些差别是不可避免的.建议大家以后提问的时候加上自己的编译环境,怎么样?大家支持以下如何??

1