实验2 多个逻辑段的汇编源程序编写与调试

发布时间:2022-07-01 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了实验2 多个逻辑段的汇编源程序编写与调试脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

任务

  • 1-1
  1. 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 0770, 寄存器(SS) =0771, 寄存器(CS) = 0072
  2. 假设程序加载后,code段的段地址是X,则,data段的段地址是x-2, stack的段地址是x-1

    实验2 多个逻辑段的汇编源程序编写与调试

  • 1-2
  1. 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 0770, 寄存器(SS) =0771, 寄存器(CS) = 0772
  2. 假设程序加载后,code段的段地址是X,则,data段的段地址是x-2, stack的段地址是x-1

    实验2 多个逻辑段的汇编源程序编写与调试

  • 1-3
  1. 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 0770, 寄存器(SS) =0772, 寄存器(CS) = 0774
  2. 假设程序加载后,code段的段地址是X,则,data段的段地址是x-4, stack的段地址是x-2

    实验2 多个逻辑段的汇编源程序编写与调试

  • 1-4
  1. 在debug中将执行到line9结束、line11之前,记录此时:寄存器(DS) = 0772, 寄存器(SS) =0774, 寄存器(CS) = 0770
  2. 假设程序加载后,code段的段地址是X,则,data段的段地址是x+2, stack的段地址是x+4

    实验2 多个逻辑段的汇编源程序编写与调试

  • 1-5 基于上述四个实验任务的实践、观察,总结并回答:
  1. 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 (N/16+1)*16

xxx segment db N dup(0) xxx ends

  1. 如果将程序task1_1.asm, task1_2.asm, task1_3.asm, task1_4.asm中,伪指令end start 改成end , 哪一个程序仍然可以正确执行?结合实践观察得到的结论,分析、说明原因task1_4可以运行 task1_1,task1_2,task1_3都是先运行stack端和data端 task1_4先运行code段

任务二

编写一个汇编源程序,实现向内存单元b800:0f00 ~ b800:0f9f连续160字节,依次重复填充十六进制数据03 04。 Tips:

  1. 在实验1的实验任务3中,做过达到同样效果的实验。但当时是通过debug的f命令实现填充的。这一次,要求编程实现。

在debug中,使用f命令,向内存单元批量填写数据。 -f b800:0f00 0f9f 03 04 把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04。

  1. 编程实现时,注意进制问题、字节顺序问题。编写后,运行程序,如果与实验1的实验任务3结果不一致,说明程序编写有错误。
assume cs:code  
code segment  
start:  
	mov ax,0b800h  
	mov ds,ax  
	mov bx,0f00h  
	mov ax,0304h  
	mov cx,80  
s:	mov [bx],ax  
	add bx,2  
	loop s    
	mov ah,4ch  
	int 21h  
code ends  
end start  

实验2 多个逻辑段的汇编源程序编写与调试

任务三

已知task3.asm

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 ah, 4ch int 21h code ends end start

要求:

  1. 编程实现把逻辑段data1和逻辑段data2的数据依次相加,结果保存到逻辑段data3中。
  2. 在debug中加载、反汇编、调试。在数据项依次相加前,和相加后,分别查看三个逻辑段data1,data2, data3对应的内存空间,确认逐一相加后,结果的确保存在了逻辑段data3中。
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 es,ax  
	mov ax,data2  
	mov ss,ax  
	mov ax,data3  
	mov ds,ax
	mov bx,0  
	 
	mov cx,10  
s:	mov al,es:[bx]
	add al,ss:[bx]
	mov [bx],al  
	add bx,1  
	loop s  

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

实验2 多个逻辑段的汇编源程序编写与调试

任务四

已知task4.asm

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 ah, 4ch int 21h code ends end start

要求:

  1. 补全程序,实现把逻辑段data1中的8个字数据逆序存储到逻辑段b中。
  2. 汇编、连接后,在debug中加载程序,运行到line15程序退出前,使用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 ss,ax  
	mov bx,0  
	mov sp,16  
	
	mov cx,8  
s:	push [bx]  
	add bx,2  
	loop s  
	mov ah, 4ch  
	int 21h  
code ends    
end start  

运行前:

实验2 多个逻辑段的汇编源程序编写与调试

运行后:

实验2 多个逻辑段的汇编源程序编写与调试

任务五

已知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

阅读程序,从理论上分析源代码的功能,尤其是line15-25,循环实现的功能是什么,逐行理解每条指令的功能。

  • 对程序进行汇编、链接,得到可执行文件,运行并观察结果。

    实验2 多个逻辑段的汇编源程序编写与调试

  • 使用debug工具对程序进行调试,执行到程序返回前,即line25执行之后、line27执行之前,观察结果。

    实验2 多个逻辑段的汇编源程序编写与调试

  • 源代码中line19的作用是? 去除后运行结果为:

    实验2 多个逻辑段的汇编源程序编写与调试

    将单词有小写变为大写

  • 修改line4里5个字节单元的值,重新汇编、链接、运行,观察结果。

db 2,3,4,5,6 --> 改成: db 5 dup(2) 或 db 5 dup(5)

修改后运行结果为:

实验2 多个逻辑段的汇编源程序编写与调试

改变字体颜色

任务六

已知task6.asm

assume cs:code, ds:data data segment db 'Pink Floyd ' ; 16字节 db 'JOAN BAEz ' ; 16字节 db 'NeiL Young ' ; 16字节 db 'Joan Lennon ' ; 16字节 data ends code segment start: ; ××× mov ah, 4ch int 21h code ends end start

要求:

  1. 补全程序,将data段中的每行第一个单词从大写->小写。
  2. 在debug中加载程序,反汇编,执行到line13退出前,用d命令查看data段对应的内存空间,确认每行第一个单词已经由大写->小写。
assume cs:code, ds:data

data segment
	db 'Pink Floyd ' ; 16字节
	db 'JOAN Baez ' ; 16字节
	db 'NEIL Young ' ; 16字节
	db 'Joan Lennon ' ; 16字节
data ends

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

	mov cx,4
s:	mov al,[bx]
	or al,00100000b
	mov [bx],al
	add bx,16
	loop s

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

实验2 多个逻辑段的汇编源程序编写与调试

任务七

问题场景描述: Power idea公司1975年-1979年的基本情况如下:

实验2 多个逻辑段的汇编源程序编写与调试

task7.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 ah, 4ch int 21h code ends end start

要求:

  1. 补全程序,实现题目要求,把年份、收入、雇员人数、人均收入,以结构化方式写入table段中。表格中,每行数据,在逻辑段table中占16个字节,各项数据占据字节大小分配如下。期中,数据之间用空格间隔

  2. 汇编、连接后,在debug中加载、调试程序。灵活、合理使用u命令、g命令、d命令,显示刚开始逻 辑段table的数据信息,以及,结构化存入数据后,数据段table的数据信息,确认实现题目要求。

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 si,0
    mov di,0
    mov bx,0
    mov cx,5
    mov sp,0
    
 s: mov ax,[si]
    mov es:[di],ax
    mov ax,[si+2]
    mov es:[di+2],ax
    mov ax,[bx+20]
    mov es:[di+5],ax
    mov dx,0
    mov es:[di+7],dx
    push cx
    mov cx,[20+10+bx]
    mov es:[di+10],cx
    div cx
    pop cx
    mov es:[di+0dh],ax
    add si,4
    add di,16
    add bx,2
    loop s
	mov ah, 4ch  
	int 21h  
code ends  
end start 

实验2 多个逻辑段的汇编源程序编写与调试

脚本宝典总结

以上是脚本宝典为你收集整理的实验2 多个逻辑段的汇编源程序编写与调试全部内容,希望文章能够帮你解决实验2 多个逻辑段的汇编源程序编写与调试所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。