实验五

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的位置发生改变==;

 

 

posted @ 2018-11-25 23:41  哈曼  阅读(91)  评论(0编辑  收藏  举报