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

四、实验结论

1. 实验任务1

此部分书写内容:
  • 附上源代码文件task1.asm
  • 附上运行结果截图
  • 附上在debug里调试到程序返回前的截图
  • 分析源代码中data段line4的字节数据的用途是?

源代码:

assume cs:code, ds:data
data segment
        db 'Nuist'
        db 5 dup(2)
data ends

code segment
start:
        mov ax, data
        mov ds, ax

        mov ax, 0b800H
        mov es, ax

        mov cx, 5
        mov si, 0
        mov di, 0f00h
s:      mov al, [si]
        and al, 0dfh
        mov es:[di], al
        mov al, [5+si]
        mov es:[di+1], al
        inc si
        add di, 2
        loop s

        mov ah, 4ch
        int 21h
code ends
end start

编译、链接task1,运行得到结果:

进行debug调试,运行到程序返回前:

对line4进行更改后重新编译运行,得到结果:

可得知line4中的字节数据,用于控制5个字符每个字符的颜色。

 

2. 实验任务2

此部分书写内容:

  • 附上源代码文件task2.asm
  • 附上运行结果截图

源代码:

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 cx,5
    mov si,0
s:    mov ax,ds:[si]
    mov ah,0
    mov bl,10
    div bl
    mov bx,ax
    mov ah,2
    mov dl,bl
    add dl,30h
    int 21h
    mov ah,2
    mov dl,bh
    add dl,30h
    int 21h
    mov ah,2
    mov dl,' '
    int 21h
    inc si
    loop s
    
    mov ah,4ch
    int 21h
code ends
end start

运行结果:

 

3. 实验任务3

此部分书写内容:
  • 附上源代码文件task3.asm
  • 回答教材中①②③三个问题。
  • 附上回答①时,反汇编查看data段中数据的截图。验证观察到的结果和理论分析是否一致。
  • 附上回答②时反汇编调试截图,即:在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

编译,链接,debug调试执行到程序返回前:

data段中数据为:0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

cs=076c,ss=076b,ds=076a

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

 

4. 实验任务4

此部分书写内容:
  • 附上源代码文件task4.asm
  • 回答教材中①②③④四个问题。
  • 附上回答②时反汇编调试截图,即:在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

编译链接,进行debug调试

data段中数据为:0123h,0456h

cs=076c,ss=076b,ds=076a

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

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为N/16向上取整的结果乘上16

 

5. 实验任务5

此部分书写内容:
  • 附上源代码文件task5.asm
  • 回答教材中①②③三个问题。
  • 附上回答②时反汇编调试截图,即:在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

编译链接:

 程序返回前,data段的数据为:

 

 cs=076a,ss=0769,ds=075a

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

 

6. 实验任务6

此部分书写内容:
  • 回答教材中提出的问题,并按要求说明原因。

只有实验任务5的程序可以正确执行,因为编译器会顺序执行代码,当数据段和栈段置于程序段前时或错误地执行,只有任务5是程序段在前,故仍然能正确执行。

 

7. 实验任务7

此部分书写内容:
  • 附上完整源代码文件task7.asm
  • 附上在debug环境中,执行到程序返回前,查看逻辑段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

c1 segment
  db 8 dup(0)
c1 ends

code segment
start:
    mov ax,a
    mov ds,ax
    mov si,0
    mov cx,8
s:    mov al,[si]
    add al,[si+10h]
    mov [si+20h],al
    inc si
    loop s

    mov ah,4ch
    int 21h
code ends
end start

编译链接:

执行到返回前:

查看逻辑段c的数据:

可见已正确完成题目要求

 

8. 实验任务8

此部分书写内容:
  • 附上完整源代码文件task8.asm
  • 附上在debug环境中,执行到程序返回前,查看逻辑段c的数据的截图,以此验证所编写的程序正确实现了题目要求。

源代码:

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,a
    mov ds,ax
    mov ax,b
    mov ss,ax
    mov sp,8

    mov si,0
    mov cx,8
s:    push [si]
    add si,2
    loop s
    mov ah,4ch
    inc 21h
code ends
end start

编译链接:

 

执行到返回前:

 

 查看逻辑段c中的数据:

 

可得证实现实验内容

posted @ 2020-11-27 09:36  尜尜牧  阅读(149)  评论(2)    收藏  举报