汇编中移位指令对内存操作时对其他内存是否有影响

来源:百度知道 编辑:UC知道 时间:2024/06/17 20:18:47
这跟我实际情况好像不一样,我用移位判断cf的值,从而输出存储单元对应的二进制值,直接对内存移位,和先把值赋给寄存器再移位结果不一样,但都不是我想要的结果,源代码如下
DATAS SEGMENT
buffer db 4 dup (?)
lf db 0dh,0ah,'$'
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
input:....
mov cx,4
output:
mov bx,cx
push cx
mov cx,8
single:
shl buffer[bx],1;换成mov dh,buffer[bx] shl dh后输出不一样
jc print1
print0:
mov dl,'0'
mov ah,2
int 21h
loop single
jmp out_loop
print1:
mov dl,'1'
mov ah,2
int 21h
loop single
out_loop:
pop cx
loop output
MOV AH,4CH
INT 21H
CODES ENDS
END START
1111
00001101000000010000000100000001改了后输出是这个结果

试试把前面那句改成

shl byte ptr buffer[bx],1
或者
shl byte ptr buffer[bx] ;这是80286时的shl,那时候直接内存中右移1位是不加第二个操作数的

可能你的编译器在处理shl的时候默认为word或dword,反汇编你的程序看看就知道了