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

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

任务

@H_304_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,请注明来意。