assembly 有人能给我解释一下为sms32v50汇编编写的代码吗

aoyhnmkz  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(79)

你好,我有练习做一个时钟,将计数从1到59循环没有结束。有人能回答我几个问题吗?

  1. 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

我找不到答案。

j2qf4p5b

j2qf4p5b1#

你的代码中所有的数字都是十六进制的。通常这需要一个"0x"前缀或者一个"h"后缀。
例如,CMP DL, 3C必须被写为CMP DL, 0x3CCMP DL, 3Ch
基于x86-16标记,代码中有许多错误:

  • MOD BL, 0A x86 - 16没有这样的mod指令。
  • MOV AL, [BL]您不能使用字节寄存器来寻址内存。
  • OUT 02输出需要指定大小。
  • DIV BL, 0A不除以立即可用值。

为什么DB后面有这样的数字?是ASCII还是什么?
没有ASCII码,我很肯定这些数字是位矢量,将使可视化的十进制数字,就像在一个数字时钟(与7段)。
这些位对应于如下段:

<--7-->
 |       |
|6|     |1|
 |       |
  <--2-->
 |       |
|5|     |3|
 |       |
  <--4-->

为什么BL我们要加03?
谁知道在一个有这么多错误的代码中,但我几乎可以肯定03是30的错别字,它会在十进制中添加48,将[0,9]转换为["0","9"]。

编辑:这是sms32v50模拟器的代码

上述错误无效!
在阅读了Michael Petch提供的帮助页面后,我现在更好地理解了"添加03"的来源:它是存储位向量表的内存地址。
类似代码

ADD BL, 03
MOV AL, [BL]

相当于

MOV AL, [3 + BL]

INC AL被加到位向量上,以便输出到最右边的数字。如果不设置位0,则输出到最左边的数字。
ADD BL, 03仍然可能是一个错误,因为JMP start只有2字节的编码!我们必须看到运行中的程序才能确定。它可能与任务描述("从1计数到59的时钟")有关,因为程序当前从DL寄存器中的0开始...

相关问题