Assembly 应为指针类型
我认为错误在循环中或某个地方Assembly 应为指针类型,assembly,tasm,Assembly,Tasm,我认为错误在循环中或某个地方 我这样做是对还是错?循环0107显然被认为是一个绝对跳转,只是一个偏移量,但是循环只能在-128-+127字节的距离上执行相对跳转。此处此指令的机器代码为e2ee,意思是:“从此处向后跳回16字节”(更准确地说:“从下一条指令向后跳回18字节”)。您可以编程此:循环$-16$代表“here”,因此$-16是“here减去16字节”=“从这里返回16字节”。您必须考虑此指令必须保持在完全相同的位置,并且强>不能< /强>插入代码之前,否则“来自这里的16个字节”将不会
我这样做是对还是错?
循环0107
显然被认为是一个绝对跳转,只是一个偏移量,但是循环
只能在-128-+127字节的距离上执行相对跳转。此处此指令的机器代码为e2ee
,意思是:“从此处向后跳回16字节”(更准确地说:“从下一条指令向后跳回18字节”)。您可以编程此:循环$-16
$
代表“here”,因此$-16
是“here减去16字节”=“从这里返回16字节”。您必须考虑此指令<强>必须保持在完全相同的位置,并且<>强>不能< /强>插入代码之前,否则“来自这里的16个字节”将不会定位到正确的位置。
更好的方法是定义一个标签并跳到那里。TASM计算距离并生成正确的循环
:
; The order of `.MODEL - .CODE - ORG - start` is relevant!
.MODEL tiny ; .model small was wrong
.CODE
ORG 100h
start: ; Start label
Mov cx, 0ah
Mov ah, 02h
Mov dl, 39h
my_107: ; Loop label
Int 21h
Mov bl, dl
Mov dl, 0ah
Int 21h
Mov dl, 0dh
Int 21h
Mov dl, bl
Dec dl
Loop my_107 ; Loop to label `my_107`
Int 20h
END start ; End of program with start label
不要忘记TLINK.EXE的参数
/t
循环
可能需要标签,而不是数字。此外,在调用int21h
期间,您不能期望寄存器保持其值。他们回来时很可能会有全新的价值观,我不知道。你能不能给你的问题补充更多的信息,让我们更好地了解你到底在问什么?代码片段本身,特别是在汇编中,不够好。另外,你没有提到你到底想做什么。嘿@BoPersson-你是一个通灵的人,能够从这一点进行调试:)也许,但在调试过程中,它实际上正在运行,并且它有一个从9到0的垂直数字的输出,以降序格式。如果你需要更多的帮助,请查看并了解更多的信息有何帮助。
; The order of `.MODEL - .CODE - ORG - start` is relevant!
.MODEL tiny ; .model small was wrong
.CODE
ORG 100h
start: ; Start label
Mov cx, 0ah
Mov ah, 02h
Mov dl, 39h
my_107: ; Loop label
Int 21h
Mov bl, dl
Mov dl, 0ah
Int 21h
Mov dl, 0dh
Int 21h
Mov dl, bl
Dec dl
Loop my_107 ; Loop to label `my_107`
Int 20h
END start ; End of program with start label