gpt4 book ai didi

assembly - 如何在汇编中增加一个变量?

转载 作者:行者123 更新时间:2023-12-04 04:17:45 24 4
gpt4 key购买 nike

我需要创建一个汇编程序来打印:0010120123...0123456789似乎我需要创建一个我可以递增的变量,一旦我到达它就会停止代码,这样我就可以返回并重新开始,这是我到目前为止的尝试。我已经可以让它打印 0123456789 十次了,但问题是让它开始计数。这是代码

.MODEL MEDIUM
.STACK
.DATA
number DB 1
.CODE
.STARTUP
mov bl,10
nextline: mov dl,'0' ; '0' is ASCII 48
nextchar: mov ah,02h ; print ASCII char in dl
int 021h
inc dl
cmp dl,':';‘:' is ASCII for 10
jnz nextchar

push dx ; save value of dl and dh on stack
mov ah,02h ; print ASCII char in dl
mov dl,13 ; carriage return (move to start of line)
int 021h
mov dl,10 ; line feed (next line)
int 021h
pop dx ; restore value in dl (and dh)
dec bl
jnz nextline
.EXIT
END

这是我尝试让它计数的尝试,也许我还没有完全理解变量是如何工作的

.MODEL MEDIUM
.STACK
.DATA
number DB '1' ;changed from 1 to '1'
.CODE
.STARTUP
mov bl,10
nextline: mov dl,'0' ; '0' is ASCII 48
nextchar: mov ah,02h ; print ASCII char in dl
int 021h
inc dl
cmp dl,number;‘:' is ASCII for 10
jnz nextchar

push dx ; save value of dl and dh on stack
mov ah,02h ; print ASCII char in dl
mov dl,13 ; carriage return (move to start of line)
int 021h
mov dl,10 ; line feed (next line)
int 021h
pop dx ; restore value in dl (and dh)
dec bl
add number,1 ;moved to outer loop
jnz nextline
.EXIT
END

最佳答案

首先,帮自己一个忙,将变量的名称从 number 更改为 character,因为现在您就是这样了听从了其他人的建议。


在 Michael 的帮助下,您已经修复了一些代码问题。仍然存在问题的是代码的下一部分:

add character,1 ;moved to outer loop
jnz nextline

如所写,当字节大小的字符从值 255 递增到 0 时,外层循环将停止。

你需要限制角色的提升;最多为“9”。
您可以为此使用 cmp 指令:

add character, 1
cmp character, '9'
jbe nextline

只要 character 小于或等于 '9',jbe 指令就会继续跳回(循环)。
它还避免使用丑陋的构造,例如:

‘:' is ASCII for 10

BL 中不再需要计数器,并且在换行部分周围保留 DX 是多余的。
这是您修改后的代码:

.MODEL MEDIUM
.STACK
.DATA
character DB '0'
.CODE
.STARTUP
mov ah, 02h ; print ASCII char in dl
nextline:
mov dl, '0'
nextchar:
int 21h
inc dl
cmp dl, character
jbe nextchar

mov dl, 13 ; carriage return
int 21h
mov dl, 10 ; line feed
int 21h
add character, 1
cmp character, '9'
jbe nextline
.EXIT
END

请注意,字符现在从“0”开始(而不是“1”)。

关于assembly - 如何在汇编中增加一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60229237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com