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