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 为什么在cx中从4更改为8会多打印一个单词?装配中_Assembly_X86 16_Fasm - Fatal编程技术网

Assembly 为什么在cx中从4更改为8会多打印一个单词?装配中

Assembly 为什么在cx中从4更改为8会多打印一个单词?装配中,assembly,x86-16,fasm,Assembly,X86 16,Fasm,忽略葡萄牙语中的注释和变量名称 org 100h escrita equ 40h ecran equ 1 ;executa o ciclo 3 vezes mov [cont], 3 ciclo1: mov ah, escrita mov bx, ecran mov cx, 4 mov dx, msg int 21h dec [cont] jnz ciclo1 ;escreve ‘---‘ mov ah, escrita mov bx, ecran mov cx, 4 mov dx, ms

忽略葡萄牙语中的注释和变量名称

org 100h

escrita equ 40h
ecran equ 1

;executa o ciclo 3 vezes
mov [cont], 3
ciclo1:
mov ah, escrita
mov bx, ecran
mov cx, 4
mov dx, msg
int 21h
dec [cont]
jnz ciclo1

;escreve ‘---‘
mov ah, escrita
mov bx, ecran
mov cx, 4
mov dx, msg0
int 21h

;executa o ciclo 5 vezes
mov [cont], 5
ciclo2:
mov ah, escrita
mov bx, ecran
mov cx, 4
mov dx, msg
int 21h
dec [cont]
jnz ciclo2

;aguarda que se carregue numa tecla
mov ah, 07h
int 21h

;retorna ao sistema operativo
mov ah, 4ch 
int 21h

msg0 db '---',10
msg db "UBI", 10
cont rb 1
此代码生成以下输出:

我想知道为什么当我改变的时候

    mov ah, escrita
    mov bx, ecran
    mov cx, 4
    mov dx, msg0
    int 21h
mov cx,4到mov cx,8 该程序打印额外的一层UBI,而不是5层,它在“--”之后打印6次UBI

您更改的代码

    mov ah, escrita
    mov bx, ecran
    mov cx, 8
    mov dx, msg0
    int 21h
打印4个字节的
msg0
,并在其后打印4个字节。让我们回顾一下定义:

msg0 db '---',10
msg db "UBI", 10
msg0
后面的4个字节正好是
msg
。因此,您得到的不是
-\n
,而是
-\nUBI\n
。然后继续打印5行
UBI

因此,在另一个
UBI
s之前会有一个额外的
UBI
行,而不是在后面,这可能是您怀疑的。您可以通过在每次输出之前更改
msg
来检查这一事实,例如,在
msg
打印循环中插入
inc[msg]
int21h之前的
,并注意第一行在出现问题的情况下没有更改。

您更改的代码

    mov ah, escrita
    mov bx, ecran
    mov cx, 8
    mov dx, msg0
    int 21h
打印4个字节的
msg0
,并在其后打印4个字节。让我们回顾一下定义:

msg0 db '---',10
msg db "UBI", 10
msg0
后面的4个字节正好是
msg
。因此,您得到的不是
-\n
,而是
-\nUBI\n
。然后继续打印5行
UBI


因此,在另一个
UBI
s之前会有一个额外的
UBI
行,而不是在后面,这可能是您怀疑的。您可以通过在每次输出之前更改
msg
来检查这一事实,例如,在
msg
打印循环中插入
inc[msg]
int21h
之前的
msg
并注意第一行在有问题的情况下没有更改。

在哪里以及如何定义
msg
msg?这里是msg0db'--',10,msg db“UBI”,10在哪里以及如何定义
msg
?这里是msg0 db'--',10,msg db“UBI”,10