[汇编语言] 实验5 编写、调试具有多个段的程序

2019-07-14  本文已影响0人  耿杰

目录:

一、将下面的程序编译、连接,用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]      ; 把 0123h 放入栈顶
    push ds:[2]      ; 把 0456h 放入栈顶
    pop ds:[2]       ; 把 0456h 放入 ds:[2]的位置 
    pop ds:[0]       ; 把 0123h 放入 ds:[0]的位置 
    
    mov ax, 4c00h
    int 21h
       
code ends
end start
1、CPU 执行程序,程序返回前, data 段中的数据为多少?

0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

2、CPU 执行程序,程序返回前,cs = __、ss = __、ds = __

cs = 076C、ss = 076B、ds = 076A

3、设程序加载后,code 段的段地址为 X, 则 data 段的段地址为 ___, stack 段的段地址为___

data = X - 1, stack = X - 2

二、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

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 段中的数据为多少?

0123H,0456H

2、CPU 执行程序,程序返回前,cs = __、ss = __、ds = __

cs = 076C、ss = 076B、ds = 076A

3、设程序加载后,code 段的段地址为 X, 则 data 段的段地址为 ___, stack 段的段地址为___

data = X - 1, stack = X - 2

4、对于如下定段的段, 如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为____

16个字节

name segment
...
name ends

三、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

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
stack ends

end start
1、CPU 执行程序,程序返回前, data 段中的数据为多少?

0123H,0456H

2、CPU 执行程序,程序返回前,cs = __、ss = __、ds = __

cs = 076A、ss = 076E、ds = 076D

3、设程序加载后,code 段的段地址为 X, 则 data 段的段地址为 ___, stack 段的段地址为___

data = X + 3, stack = X + 4

image.png

五、如果将(1)、(2)、(3) 题中的最后一条伪指令end start改为end(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?说说明原因

(3)题可以正确执行。

分析:(2)题:

assume cs:code, ds:data,ss:stack
        
    
   
data segment
    dw 0123H, 0456H
data ends          

stack segment
    dw 1234, 5678
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

五、程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存在c段中

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   ; db 表示1个字节
c ends  
        
code segment 
start:  

    mov bx, 0
    mov cx, 8     ; 设置loop的循环次数
    
    s: mov ax, a  ; 取出 a 段的数据,并赋值给 dl
       mov ds, ax
       mov dl, [bx]
       
       mov ax, b  ; 取出 b 段的数据,对应的加给 dl
       mov ds, ax
       add dl, [bx]
       
       mov ax, c  ; 设置 c 段对应的内存单元的值
       mov ds, ax
       mov ds:[bx], dl
       
       inc bx
       loop s
    
    mov ax, 4c00h
    int 21h

code ends     
 
end  start

重点

六、程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中

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 cx, 8

mov ax, b
mov ss, ax
mov sp, 10h

s: push [bx]
inc bx
inc bx
loop s

mov ax, 4c00h
int 21h

code ends
end  start

结果

image.png

重点

上一篇下一篇

猜你喜欢

热点阅读