实验2 多个逻辑段的汇编源程序编写与调试
实验任务一
- 任务1-1
-
对程序task1_1.asm进行汇编、连接,用debug加载、跟踪调试,基于结果,回答问题。
① ds=
076A
ss=076B
cs=076C
② 假设程序加载后,code 段的段地址是X
,则,data 段的段地址是X-2
,stack 的段地址是X-1
。
-
- 任务1-2
-
对程序task1_2.asm进行汇编、连接,用debug加载、跟踪调试,基于结果,回答问题。
① ds=
076A
ss=076B
cs=076C
② 假设程序加载后,code 段的段地址是X
,则,data 段的段地址是X-2
,stack 的段地址是X-1
。
-
- 任务1-3
-
对程序task1_3.asm进行汇编、连接,用debug加载、跟踪调试,基于结果,回答问题。
① ds=
076A
ss=076C
cs=076E
② 假设程序加载后,code 段的段地址是X
,则,data 段的段地址是X-4
,stack 的段地址是X-2
。
-
- 任务1-4
-
对程序task1_4.asm进行汇编、连接,用debug加载、跟踪调试,基于结果,回答问题。
① ds=
076C
ss=076E
cs=076A
② 假设程序加载后,code 段的段地址是X
,则,data 段的段地址是X+2
,stack 的段地址是X+4
。
-
- 任务1-5
- 基于上述四个实验任务的实践、观察,总结并回答:
① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是N/16 向上取整
②end start
改为end
后
task1_4可以正常执行,因为其code段定义在最前,而去掉之前end start明确程序入口是start处,去掉之后前三个文件数据段定义在代码段前无法找到
- 基于上述四个实验任务的实践、观察,总结并回答:
实验任务二
编写一个汇编源程序,实现向内存单元b800:0f00 ~ b800:0f9f连续160字节,依次重复填充十六进制数据03 04。
- 代码
assume cs:code code segment start: mov ax,0b800h mov ds,ax mov bx,0f00h mov cx,160 mov ax,0403h s:mov [bx],ax inc bx inc bx loop s mov ax,4c00h int 21h code ends end start
实验任务三
- 代码
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 cx,10
mov bx,0
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 ax,4c00h
int 21h
code ends
end start
实验任务4
代码:
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 cx,8
mov ax,data2
mov ss,ax
mov sp,16
mov bx,0
s:
push [bx]
add bx,2
loop s
mov ah, 4ch
int 21h
code ends
end start
实验任务5
- Line19的作用,与操作将低位开始第六位置0即小写字母变为大写字母,
- 可知Line4的5个字节单元控制字体的颜色
实验任务6
代码
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 al,[bx]
or al,00100000B
mov [bx],al
mov al,[bx+16]
or al,00100000B
mov [bx+16],al
mov al,[bx+32]
or al,00100000B
mov [bx+32],al
mov al,[bx+48]
or al,00100000B
mov [bx+48],al
inc bx
loop s
mov ah, 4ch
int 21h
code ends
end start
实验任务7
代码
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 cx,5
mov ax,table
mov es,ax
mov di,0
mov bx,0
c1:
mov ax,[bx]
mov es:[di],ax
add bx,2
mov ax,[bx]
add di,2
mov es:[di],ax
add bx,2
add di,14
loop c1
mov cx,5
mov di,5
c2:
mov ax,[bx]
mov es:[di],ax
add bx,2
add di,16
loop c2
mov cx,5
mov di,8
c3:
mov ax,[bx]
mov es:[di],ax
add bx,2
add di,16
loop c3
mov cx,5
mov di,5
c4:
mov ax,es:[di]
mov dl,es:[di+3]
div dl
mov es:[di+6],al
add di,16
loop c4
mov ah, 4ch
int 21h
code ends
end start
刚开始逻辑段的信息
执行完成后
可以看到相应列的内容已复制到table中
posted on 2021-11-11 22:43 whiteblossoms 阅读(38) 评论(3) 编辑 收藏 举报