实验2 多个逻辑段的汇编源程序编写与调试
实验任务1
任务1-1
task1_1.asm源码
task1_1调试到line17结束、line19之前截图
问题回答
① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = __0770__, 寄存器(SS)
= __0771__, 寄存器(CS) = __0772__
② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X-2__, stack的段地址是
__X-1__。
任务1-2
任务task1_2.asm源码
task1_2调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图
问题回答
① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = __0770__, 寄存器(SS)
= __0771__, 寄存器(CS) = __0772__
② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X-2__, stack的段地址是
__X-1__。
任务1-3
任务task1_3.asm源码
task1_3调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图
问题回答
① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = __0770__, 寄存器(SS)
= __0772__, 寄存器(CS) = __0774__
② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X-4__, stack的段地址是
__X-2__。
任务1-4
任务task1_4.asm源码task1_4调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图
问题回答
① 在debug中将执行到line9结束、line11之前,记录此时:寄存器(DS) = __0772__, 寄存器(SS) =
__0774__, 寄存器(CS) = __0770__
② 假设程序加载后,code段的段地址是X____,则,data段的段地址是__X+2__, stack的段地址
是__X+4__。
任务1-5
基于上述四个实验任务的实践、观察,总结并回答:
① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 __2*[N/16] B_([]为向上取整)_。
xxx segment db N dup(0) xxx ends
② 如果将程序task1_1.asm, task1_2.asm, task1_3.asm, task1_4.asm中,伪指令 end start 改成
end , 哪一个程序仍然可以正确执行。结合实践观察得到的结论,分析、说明原因。
程序task1_4.asm可以正确执行,因为end start指明了程序从start开始执行,不指定默认CS为DS+10H,只有task1_4.asm的程序段在最上面,可以正确执行,其余会出错,如图:
实验任务2
代码:
assume cs:code code segment start: mov ax,0b800h mov ds,ax mov ax,0403h mov bx,0f00h mov cx,50h s: mov [bx],ax add bx,2 loop s mov ah,4ch int 21h code ends end start
运行截图:

实验任务3
代码:
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 ax,data1 mov ds,ax mov bx,0 mov cx,0ah s: mov ax,[bx] add ax,10h[bx] mov 20h[bx],ax inc bx loop s mov ah,4ch int 21h code ends end start
相加前:

相加后:

实验任务4
代码:
assume cs:code,ss:stack data1 segment dw 2, 0, 4, 9, 2, 0, 1, 9 data1 ends data2 segment dw 8 dup(?) data2 ends stack segment dw 8 dup(?) stack ends code segment start: mov ax,stack mov ss,ax mov sp,8 mov ax,data1 mov ds,ax mov bx,0 mov cx,8 s: push [bx] add bx,2 loop s mov ax,data2 mov ds,ax mov bx,0 mov cx,8 s2: pop [bx] add bx,2 loop s2 mov ah, 4ch int 21h code ends end start
存储前:

存储后:

实验任务5
代码:
assume cs:code, ds:data data segment db 'Nuist' ;db 2, 3, 4, 5, 6 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
运行结果:


line19的作用是变为大写字母
line4的作用是设置颜色
实验任务6
代码:
assume cs:code, ds:data, ss:stack data segment db 'Pink Floyd ' db 'JOAN Baez ' db 'NEIL Young ' db 'Joan Lennon ' data ends stack segment dw 1 dup(?) stack ends code segment start: mov ax,stack mov ss,ax mov sp,1 mov ax,data mov ds,ax mov ax,data mov es,ax mov cx,4 s: push cx mov bx,0 mov cx,4 s2: mov al,es:[bx] or al,20h mov es:[bx],al inc bx loop s2 pop cx mov ax,es inc ax mov es,ax loop s mov ah, 4ch int 21h code ends end start
转换前:

转换后:

实验任务7
代码:
assume cs:code, ds:data, es:table,ss:stack data segment db '1975', '1976', '1977', '1978', '1979' dd 16, 22, 382, 1356, 2390 dw 3, 7, 9, 13, 28 data ends table segment db 5 dup( 16 dup(' ') ) ; table ends stack segment dw 1 dup(?) stack ends code segment start: mov ax,stack mov ss,ax mov sp,1 mov ax,data mov ds,ax mov ax,table mov es,ax mov di,0;data ;1 mov bx,0;table mov si,0;table mov cx,5 year: push cx mov cx,4 year2: mov al,ds:[di] mov es:[bx+si],al inc si inc di loop year2 pop cx add bx,10h mov si,0 loop year ;2 mov bx,0 mov si,5 mov cx,5 income: push cx mov cx,4 income2: mov al,ds:[di] mov es:[bx+si],al inc si inc di loop income2 pop cx add bx,10h mov si,5 loop income ;3 mov bx,0 mov si,10 mov cx,5 num: push cx mov cx,2 num2: mov al,ds:[di] mov es:[bx+si],al inc si inc di loop num2 pop cx add bx,10h mov si,10 loop num ;4 mov bx,0 mov si,5 mov cx,5 cal: mov ax,word ptr es:[bx+si] add si,2 mov dx,word ptr es:[bx+si] add si,3 div word ptr es:[bx+si] add si,3 mov word ptr es:[bx+si],ax add bx,10h mov si,5 loop cal mov ah, 4ch int 21h code ends end start
原始数据信息截图


结构化写入后的截图:


浙公网安备 33010602011771号