实验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中的数据:

可得证实现实验内容
浙公网安备 33010602011771号