Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 应为指针类型_Assembly_Tasm - Fatal编程技术网

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