我刚刚进入汇编,并且想知道有xor
一次超过1个字节的任何方式。我想在1个命令中执行此操作:
IDEAL
MODEL small
STACK 100h
DATASEG
msg db "I LIKE ASSEMBLY$"
CODESEG
start:
mov ax,@data
mov ds, ax
xor [msg],01001010b
exit:
mov ax, 4c00h
int 21h
END start
但是使用这段代码只有xor
是'我'
答案 0 :(得分:1)
EMU8086仅限一次使用16位。要XOR
整个字符串,您需要使用某种循环。由于字符串中的每个字符仅由1个字节或8位表示,因此一次可以XOR
个2个字符!
我会在一次处理1个字符时首先显示解决方案:
start:
mov ax,@data
mov ds, ax
mov bx, offset msg
jmp TestEnd
again:
xor [bx], 01001010b
inc bx
TestEnd:
cmp [bx], '$'
jne again
现在有一个解决方案,一次处理2个字符:
start:
mov ax,@data
mov ds, ax
mov bx, offset msg
again:
cmp [bx], '$'
je EndOfString
cmp [bx+1], '$'
je LastChar
xor word ptr [bx], 0100101001001010b
add bx, 2
jmp again
LastChar:
xor [bx], 01001010b
inc bx
EndOfString:
这两种解决方案都使BX寄存器指向终止的$字符。
答案 1 :(得分:0)
是的,有2, 4, and 8 byte opcodes(8字节操作码需要x86-64,并且只允许符号扩展的32位立即数,因此您需要在寄存器中使用常量来使用此模式。)
xor dword [msg], 01001010010010100100101001001010b