你好,我有练习做一个时钟,将计数从1到59循环没有结束。有人能回答我几个问题吗?
- DB后面为什么有这样的数字?是ASCII还是什么?
1.为什么BL我们要加03?
如果有人能解释我一行行的代码.谢谢.
语言:sms32v50汇编程序
JMP start
DB FA ; 0
DB 0A ; 1
DB B6 ; 2
DB 9E ; 3
DB 4E ; 4
DB DC ; 5
DB FC ; 6
DB 8A ; 7
DB FE ; 8
DB DE ; 9
start:
MOV DL, 00
start1:
MOV [90], DL
MOV BL, [90]
MOD BL, 0A
ADD BL, 03
MOV AL, [BL]
INC AL
OUT 02
MOV BL, [90]
DIV BL, 0A
ADD BL, 03
MOV AL, [BL]
OUT 02
NOP
NOP
NOP
INC DL
CMP DL, 3C
JNZ koniec
MOV DL, 00
JMP start1
koniec:
JMP start1
END
我找不到答案。
1条答案
按热度按时间j2qf4p5b1#
你的代码中所有的数字都是十六进制的。通常这需要一个"0x"前缀或者一个"h"后缀。
例如,
CMP DL, 3C
必须被写为CMP DL, 0x3C
或CMP DL, 3Ch
。基于x86-16标记,代码中有许多错误:
MOD BL, 0A
x86 - 16没有这样的mod
指令。MOV AL, [BL]
您不能使用字节寄存器来寻址内存。OUT 02
输出需要指定大小。DIV BL, 0A
不除以立即可用值。为什么
DB
后面有这样的数字?是ASCII还是什么?没有ASCII码,我很肯定这些数字是位矢量,将使可视化的十进制数字,就像在一个数字时钟(与7段)。
这些位对应于如下段:
为什么BL我们要加03?
谁知道在一个有这么多错误的代码中,但我几乎可以肯定03是30的错别字,它会在十进制中添加48,将[0,9]转换为["0","9"]。
编辑:这是sms32v50模拟器的代码
上述错误无效!
在阅读了Michael Petch提供的帮助页面后,我现在更好地理解了"添加03"的来源:它是存储位向量表的内存地址。
类似代码
相当于
INC AL
被加到位向量上,以便输出到最右边的数字。如果不设置位0,则输出到最左边的数字。ADD BL, 03
仍然可能是一个错误,因为JMP start
只有2字节的编码!我们必须看到运行中的程序才能确定。它可能与任务描述("从1计数到59的时钟")有关,因为程序当前从DL寄存器中的0开始...