gpt4 book ai didi

assembly - 用汇编语言画线

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

我用汇编语言写了一个程序,应该画8条​​水平线。但我有一个问题。我的第 5 行没有显示。每条线的长度应为 320,高度为 25。在 CX 中,我有行的结尾,而在 BX 中,我有行的开头。每一行都应该是红色的。但是第5行是黑色的。

绘制线条的代码如下所示:

Draw PROC
MOV ax, 0a000h
MOV ES, AX
MOV BX, CX
ADD CX, 8000
etDraw:
MOV al, 4
MOV ES:[BX], AL
INC BX
CMP BX, CX
JL etDraw
RET
ENDP

使用流程:
    MOV AX, 0f00h
INT 10h
MOV ax, 0013H
int 10h
MOV ah, 0Ch
CALL Draw
CALL Draw
CALL Draw
CALL Draw
CALL Draw
CALL Draw
CALL Draw
CALL Draw
MOV ah, 08h
int 21h
mov ax, 0f00h
int 10h
mov ax, 0003h
int 10h
mov ax, 4c00h
int 21h

最佳答案

问题是当您比较 Draw 中的地址时要查看是否已到达行尾,请使用 JL (“Jump Less”),这是一个带符号的比较。您应该使用无符号比较( JB ,“跳到下方”)或使用 JE 检查相等性或 JZ .

这仅发生在您的第 5 行,因为这是结束地址从正数翻转为负数的地方(当它被视为有符号数时)。具体来说,

4 * 8000 = 32000
5 * 8000 = 40000, but with 16 bit signed numbers this will be -25536.

在第 5 行,BX 从 32000 开始,CX 从 -25536 开始,所以你会得到一个像素集和 JL不会跳(因为 32001 > -25536)。

请记住,无论何时比较地址,这些都应该几乎总是无符号比较( JBJA )。

关于assembly - 用汇编语言画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61970266/

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