实验2 多个逻辑段的汇编源程序编写与调试
1.实验任务1
任务1-1
task1_1.asm源码
task1_1调试到line17结束、line19之前截图

问题回答
① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 76A , 寄存器(SS) = 076B , 寄存器(CS) = 076C
② 假设程序加载后,code段的段地址是X,则,data段的段地址是 X-2 , stack的段地址是 X-1 。
任务1-2
任务task1_2.asm源码
task1_2调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图

问题回答
① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076A, 寄存器(SS) = 076B, 寄存器(CS) = 076C
② 假设程序加载后,code段的段地址是X,则,data段的段地址是 X-2 , stack的段地址是 X-1 。
任务1-3
任务task1_3.asm源码
task1_3调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图

问题回答 ① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) =076A, 寄存器(SS) = 076C, 寄存器(CS) = 076E
② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-4, stack的段地址是 X-2。
任务1-4
任务task1_4.asm源码
task1_4调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图

问题回答
① 在debug中将执行到line9结束、line11之前,记录此时:寄存器(DS) = 076C, 寄存器(SS) = 076E, 寄存器(CS) = 076A
② 假设程序加载后,code段的段地址是X,则,data段的段地址是X+2, stack的段地址是X+4。
任务1-5
基于上述四个实验任务的实践、观察,总结并回答:
① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 N/16向上取整 。
xxx segment
db N dup(0)
xxx ends
② 如果将程序task1_1.asm, task1_2.asm, task1_3.asm, task1_4.asm中,伪指令 end start 改成 end , 哪一个程序仍然可以正确执行。结合实践观察得到的结论,分析、说明原因。
task1_1.asm, task1_2.asm, task1_3.asm报错
task1_4.asm能正确执行
1_4中以代码开始,end可以正常执行
2. 实验任务2
编写一个汇编源程序,实现向内存单元b800:0f00 ~ b800:0f9f连续160字节,依次重复填充十六进制数 据03 04。
assume cs:code code segment start: mov ax, 0b800h mov ds, ax mov bx, 0f00h mov cx, 80 s: mov [bx], 0403h add bx, 2 loop s mov ah, 4ch int 21h code ends end

assume cs:code data1 segment db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers data1 ends data2 segment db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0 ; ten numbers data2 ends data3 segment db 16 dup(0) data3 ends code segment start: mov bx, 0 mov cx, 10 s:mov dx, 0 mov ax, data1 mov ds, ax add dx, [bx] mov ax, data2 mov ds, ax add dx, [bx] mov ax, data3 mov ds, ax mov [bx], dx inc bx loop s mov ah, 4ch int 21h code ends end start

4. 实验任务4
补充完整后的汇编源代码
在debug中加载、反汇编、调试截图
要求给出,在程序退出前,使用d命令查看数据段data2对应的内存空间的截图。
assume cs:code data1 segment dw 2, 0, 4, 9, 2, 0, 1, 9 data1 ends data2 segment dw 8 dup(?) data2 ends code segment start: mov ax, data1 mov ds, ax mov ax, data2 mov es, ax mov ss, ax mov sp, 30 mov bx, 0 mov cx, 8 s1: push ds:[bx] add bx, 2 loop s1 mov bx, 0 mov cx, 8 s2: pop es:[bx] add bx, 2 loop s2 mov ah, 4ch int 21h code ends end start
运行结果:

5. 实验任务5
task5.asm源码
运行结果截图
assume cs:code, ds:data data segment db 'Nuist' db 2, 3, 4, 5, 6 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
使用debug工具对程序进行调试,使用g命令一次性执行到程序返回前(即ine25执行之后、line27 执行之前)的截图

源代码中line19的作用是?小写字母转换成大写
源代码中data段line4的字节数据的用途是?设置字体颜色
6. 实验任务6
task6.asm源代码
assume cs:code, ds:data data segment db 'Pink Floyd ' db 'JOAN Baez ' db 'NEIL Young ' db 'Joan Lennon ' data ends code segment start: mov ax,data mov ds,ax mov cx,4 mov bx,0 s: mov dx,cx mov cx,4 mov si,0 p: mov al,ds:[bx+si] or al,00100000B mov ds:[bx+si],al inc si loop p add bx,16 mov cx,dx loop s mov ah, 4ch int 21h code ends end start
在debug中加载、反汇编、调试截图 要求给出,在程序退出前,使用d命令查看数据段data对应的内存空间的截图。


7. 实验任务7 t
ask7.asm源码
assume cs:code, ds:data, es:table data segment db '1975', '1976', '1977', '1978', '1979' dw 16, 22, 382, 1356, 2390 dw 3, 7, 9, 13, 28 data ends table segment db 5 dup( 16 dup(' ') ) ; table ends code segment start: mov ax, data mov ds, ax mov ax, table mov es, ax mov cx, 5 mov bx, 0 mov si, 0 s1: mov ax, [si] mov es:[bx], ax mov ax, [si+2] mov es:[bx+2], ax add bx, 16 add si, 4 loop s1 mov cx, 5 mov bx, 5 mov si, 20 s2: mov ax, [si] mov es:[bx], ax mov ax, 0000h mov es:[bx+2], ax add bx, 16 add si, 2 loop s2 mov cx, 5 mov bx, 10 mov si, 30 s3: mov ax, [si] mov es:[bx], ax add bx, 16 add si, 2 loop s3 mov cx, 5 mov si, 5 s4: mov ax, es:[si] mov bl, es:[si+5] div bl mov es:[si+8], al add si, 16 loop s4 mov ah, 4ch int 21h code ends end start
调试截图
查看table段原始数据信息截图
在debug中运行到程序退出之前,使用d命令查看table段对应的内存空间的截图,确认信息是 否按要求结构化地写入到指定内存



浙公网安备 33010602011771号