实验五
c教材 133 实验 5
将下面程序编译,连接,用DEBUG加载.跟踪
assume cs:code, ds:data, ss:stack
data segment
dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
data ends
stack segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends
code segment
start: mov ax,stack
mov ss, ax
mov sp,16
mov ax, data
mov ds, ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
1 CPU执行程序,程序返回前DATA段的数据是多少?0123h ,0456h
2.CPU执行程序,程序返回前,CS=SS+1h;CS=DS+2h;SS=CS-1h;SS=ds+2h;ds=cs-2h;ds=ss-1;
3程序加载完后,CODE段地址X,则DATA段位X-2,,STACK段X-1;
(2)assume cs:code, ds:data, ss:stack
data segment
dw 0123h, 0456h
data ends
stack segment
dw 0, 0
stack ends
code segment
start: mov ax,stack
mov ss, ax
mov sp,16
mov ax, data
mov ds, ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
1 CPU执行程序,程序返回前DATA段的数据是多少? 0123;0456
.2CPU执行程序,程序返回前,CS=SS+1h;CS=DS+2h;SS=CS-1h;SS=ds+2h;ds=cs-2h;ds=ss-1;
3。程序加载完后,CODE段地址X,则DATA段位X-2,,STACK段X-1;
4。对于name segment
name ends
如果段中的数据占N个字节,则程序加载后该段实际占有的空间为:如果N〉16x(x为正整数);则分配空间为X*16个字节空间
(3)assume cs:code, ds:data, ss:stack
code segment
start: mov ax,stack
mov ss, ax
mov sp,16
mov ax, data
mov ds, ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
data segment
dw 0123h, 0456h
data ends
stack segment
dw 0, 0,0,0
stack ends
end start
1 CPU执行程序,程序返回前DATA段的数据是多少? 0123;0456
.2CPU执行程序,程序返回前,CS=SS-4h;CS=DS-3h;SS=CS+4h;SS=ds+1h;ds=cs+3h;ds=ss-1;
3。程序加载完后,CODE段地址X,则DATA段位X+3,,STACK段X+4;
4如果END START改为end
那个可以执行?
CODE段可以执行;如果将DATA,STACK段放在前面将不会一开始 执行CODE段;
(5)
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
mov cx,8
mov bx,0
q: mov ax,a
mov ds,ax
mov dl,[bx]
mov ax,b
mov ds,ax
add dl,[bx]
mov ax,c
mov ds,ax
mov [bx],dl
add bl,1
loop q
code ends
end start
不用栈 直接多次用DS将值赋予 C
(6)
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,8
mov cx,4
mov bx,0
s:
add bx,2
mov dl,[bx]
sub bx,2
mov al,[bx]
mov dh,al
add bx,4
push dx
loop s
code ends
end start
开始时:sp=8
sp=16
结束时:sp=8
SP=16
实验总结: 在这次实验中我多次将AX,BX,CX,DX,当成段寄存器使用编译无法进行,在实验6
前9个都是16位进制而不是10进制,但是在结果我发现将SP改为16和8时D命令出现不同 B栈在不同的SP下0的位置发生改变==;