实验3 多个段的汇编源程序编写与调试

1. 实验任务1

使用任意文本编辑器,录入汇编源程序task1.asm。

阅读源程序,从理论上分析源代码的功能,尤其是line15-25,循环实现的功能是什么,逐行理解每条指 令的功能。

mov cx, 5//设置循环次数为5
mov si, 0
mov di, 0f00h//设置起始内存单元地址
s: mov al, [si]//将数据段内存单元[si]赋给al
and al, 0dfh//将字母转为大写字母
mov es:[di], al//将结果保存给附加段的内存单元中
mov al, [5+si]//将指针移动至保存数据的内存单元中
mov es:[di+1], al//将数据2紧跟大写字母保存
inc si//si自增1
add di, 2//di因为每次保存两字节数据(字母和数字2)所以自增2
loop s//继续下次循环

使用masm、link对task1.asm进行汇编、链接,得到可执行文件task1.exe,运行并观察结果。

使用debug工具对程序进行调试,执行到程序返回前,即line27之前,观察结果。

修改line4里5个字节单元的值,重新汇编、链接、运行,观察结果。

基于观察,分析、猜测这里的数值作用是什么。

根据实验结果观察猜测此处数据的作用是改变大写字母的颜色。

2. 实验任务2

已知数据段data中定义字节数据如下:

assume cs:code, ds:data
data segment
     db 23,50,66,71,35
data ends
code segment
start:

      mov ax,data
      mov ds,ax
      mov di,0
      mov cx,5
      
  s1:mov ah,0
      mov al,ds:[di]
      mov bl,10
      div bl
      mov ds:[10+di],al
      mov ds:[11+di],ah
      
      mov ah,2
      mov dl,ds:[10+di]
      add dl,30h
      int 21h
      
      mov ah,2
      mov dl,ds:[11+di]
      add dl,30h
      int 21h
      
      mov ah,2
      mov dl," "
      int 21h
      
      inc di
      loop s1
      
      
      mov ax,4c00h
      int 21h
code ends
end start

 

3. 实验任务3

教材「实验5 编写、调试具有多个段的程序」(1) 程序源码见task3.asm。

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

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

 076AH

CPU执行程序,程序返回前,cs=076CH,ss=076BH,ds= 076AH。

设程序加载后,code段的段地址为X,则data段的段地址为 X-2,stack段的段地址为X-1 。

 4. 实验任务4

教材「实验5 编写、调试具有多个段的程序」(2) 程序源码见task4.asm。

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

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

076AH

CPU执行程序,程序返回前,cs=076CH、ss=076BH、ds=076AH。

设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。

对于如下定义段:

name segment

 

name ends

如果段中的数据占N个字节,则该程序加载后,该段实际占有的空间为16字节。

5. 实验任务5

教材「实验5 编写、调试具有多个段的程序」(3) 程序源码见task5.asm。

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

 

 

 

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

076DH

CPU执行程序,程序返回前,cs=076AH、ss=076EH、ds=076DH。

设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4。

6. 实验任务6

教材「实验5 编写、调试具有多个段的程序」(4)

(3)题的程序仍可以正确执行,因为(3)是先为代码段分配内存,所以ip指针默认指向代码段的起始地址。

7. 实验任务7

教材「实验5 编写、调试具有多个段的程序」(5) 程序源码见task7.asm。

 

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 8 dup(0)
c ends

code segment
start:
        mov ax,a
        mov ds,ax
        mov cx,8
        mov ax,b
        mov es,ax
        mov di,0
      
s:      mov al,ds:[di]
        add es:[di],al 
        inc di
        loop s

        mov ax,c
        mov ds,ax
        mov cx,8
        mov di,0

s1:     mov al,es:[di]
         add [di],al
         inc di
         loop s1

         mov ax,4c00h
         int 21h

code ends
end start

  

 

 8. 实验任务8

教材「实验5 编写、调试具有多个段的程序」(6) 程序源码见task8.asm。

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 8 dup(0)
b ends

code segment
start: 
	mov ax,b
	mov ss,ax
	mov ax,a
	mov ds,ax
	mov sp,0010h
	mov di,0
	mov cx,8	

s:	push [di]
	add di,2
	loop s	



	mov ax,4c00h
	int 21h

code ends
end start

 

posted @ 2020-11-21 17:07  喵小屁  阅读(242)  评论(3)    收藏  举报