为什么在 cx 中从 4 更改为 8 会多打印一个字?组装中
Why changing from 4 to 8 in cx prints one more word? In Assembly
忽略葡萄牙语的注释和变量名称。
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
打印 msg0
的 4 个字节及其后的 4 个字节。让我们回顾一下定义:
msg0 db '---',10
msg db "UBI", 10
msg0
后面的4个字节正好是msg
。因此,您得到的不是 ---\n
,而是 ---\nUBI\n
。然后你继续打印 5 行 UBI
.
所以你会得到一个额外的 UBI
行 在 其他 UBI
之前,而不是之后,你可能已经怀疑了。您可以通过在每次输出之前更改 msg
来检查这一事实——例如通过在 msg
打印循环中的 int 21h
之前插入 inc [msg]
并注意到第一行在有问题的情况下没有改变。
忽略葡萄牙语的注释和变量名称。
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
打印 msg0
的 4 个字节及其后的 4 个字节。让我们回顾一下定义:
msg0 db '---',10
msg db "UBI", 10
msg0
后面的4个字节正好是msg
。因此,您得到的不是 ---\n
,而是 ---\nUBI\n
。然后你继续打印 5 行 UBI
.
所以你会得到一个额外的 UBI
行 在 其他 UBI
之前,而不是之后,你可能已经怀疑了。您可以通过在每次输出之前更改 msg
来检查这一事实——例如通过在 msg
打印循环中的 int 21h
之前插入 inc [msg]
并注意到第一行在有问题的情况下没有改变。