【发布时间】:2020-07-16 14:30:39
【问题描述】:
我正在尝试编写一个执行以下操作的程序:
- 在
bx寄存器中存储一个整数 - 如果
bx寄存器中存储的值小于等于4,则将A复制到al寄存器中 - 如果
bx寄存器中存储的值大于10,则将B复制到al寄存器中 - 如果这两个条件都不成立,请将
C复制到al寄存器中 - 输出
al寄存器的值
这是我写的程序:
section .data
section .text
global _start
_start:
mov bx, 2
cmp bx, 4
jle copy_a
cmp bx, 10
jg copy_b
mov al, 'C'
copy_a:
mov al, 'A'
copy_b:
mov al, 'B'
mov byte [esp], al ;push al
mov eax, 0x04
mov ebx, 0x01
mov ecx, esp ;esp points to the character to be printed
mov edx, 0x01
int 0x80
mov eax, 0x01
mov ebx, 0x00
int 0x80
无论我将bx 的值更改为什么,它总是输出B
【问题讨论】:
-
mov byte [esp], al不会推送,它只会覆盖堆栈内存中的内容。没关系,但是您的 cmets 与代码不匹配。如果你想推送,你会push eax(AL 是 EAX 的低字节,x86 是小端,所以 ESP 会指向来自 AL 的字节)