gpt4 book ai didi

linux - 组装 NASM - AND 掩模

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:54 24 4
gpt4 key购买 nike

当我运行这个程序时,它说:

jdoodle.asm:9: 错误:操作码和操作数的组合无效

问题是AND啊。其余的代码应该是正确的,我只需要知道如何解决这个问题,因为看起来我无法在两个寄存器之间进行 AND 运算。

section .text
global _start
_start:
call _input
mov al, input
mov ah, maschera
and al, ah
mov input, al
call _output
jmp _exit

_input:
mov eax, 3
mov ebx, 0
mov ecx, input
mov edx, 1
int 80h
ret

_output:
mov eax, 4
mov ebx, 1
mov ecx, input
mov edx, 1
int 80h
ret

_exit:

mov eax, 1

int 80h

section .data
maschera: db 11111111b

segment .bss
input resb 1

最佳答案

MASM/TASM/JWASM 语法与 NASM 不同。如果您想在某个地址加载/存储数据,则需要显式使用方括号。如果您想使用 MOV 指令将标签地址放入变量中,则不要使用方括号。方括号就像取消引用运算符。

在 32 位代码中,您需要确保将地址加载到 32 位寄存器中。任何高于 255 的地址都不适合 8 字节寄存器,任何高于 65535 的地址都不适合 16 位寄存器。

您可能正在寻找的代码是:

section .text
global _start
_start:
call _input
mov al, [input]
mov ah, [maschera]
and al, ah
mov [input], al
call _output
jmp _exit

_input:
mov eax, 3
mov ebx, 0
mov ecx, input
mov edx, 1
int 80h
ret

_output:
mov eax, 4
mov ebx, 1
mov ecx, input
mov edx, 1
int 80h
ret

_exit:

mov eax, 1

int 80h

section .data
maschera: db 11111111b

segment .bss
input resb 1

关于linux - 组装 NASM - AND 掩模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55881753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com