实验五
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的位置发生改变==;
                    
                
                
            
        
浙公网安备 33010602011771号