在看王爽老师的书时,遇到一个问题,书上也没有讲,望大家能给我点拨一下。下面是原程序:
assume ss:stacksg, cs:codesg, ds:datasg
stacksg segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stacksg ends
datasg segment
db '1. display '
db '2. browse '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:
mov ax, stacksg
mov ss, ax
mov sp, 16
mov ax, datasg
mov ds, ax
mov bx, 0
mov ax, 0
mov cx, 4
s1: push cx
mov si, 0
mov cx, 4
s2: mov al, [bx+si+3]
add al, 11011111b
mov [bx+si+3], al
inc si
loop s2
add bx, 16
pop cx
loop s1
mov ax, 4c00h
int 21h
codesg ends
end start
把上面的程序保存为pp.asm后,用masm5进行编译、用link进行连接生成pp.exe文件,然后在命令行方式下用Debug.exe调入内存进行检查。调入内存后在查看执行之前,各寄存器分别是:
AX=0000 BX=0000 CX=0083 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=143D ES=143D SS=144D CS=1452 IP=0000 NV UP EI PL NZ NA PO NC
1452:0000 B84D14 MOV AX, 144D
有一个问题不明白:第一条指令怎么是MOV AX, 144D?可是SS寄存器已经是144D了? |