汇编2.docx

上传人:b****5 文档编号:8073993 上传时间:2023-01-28 格式:DOCX 页数:6 大小:18.62KB
下载 相关 举报
汇编2.docx_第1页
第1页 / 共6页
汇编2.docx_第2页
第2页 / 共6页
汇编2.docx_第3页
第3页 / 共6页
汇编2.docx_第4页
第4页 / 共6页
汇编2.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

汇编2.docx

《汇编2.docx》由会员分享,可在线阅读,更多相关《汇编2.docx(6页珍藏版)》请在冰豆网上搜索。

汇编2.docx

汇编2

汇编语言程序设计

实验三汇编语言程序调试运行

学号:

姓名:

(1)将下面的数据段输入,取名为1.asm,保存在MASM文件夹下,生成.lst文件,不必连接运行,查看1.lst文件,试回答:

DA1,DA2的偏移量分别为多少?

COUNT的值为多少?

datasegment

org20h

  num1=8

  num2=num1+10h

  da1db'IBMPC'

da2db0ah,0dh

  countequ$-da1

  dataends

end

(2)输入下列指令,改正可能的错误(先不要运行程序):

datasegment

var1db0,25,0dh,300

var2db12h,a4h,6bh

var3db'ABCDEF'

var4dw1234h,5678h

var5dw10hdup(?

dataends

codesegment

assumecs:

code,de:

data

beginmovax,data

movds,ax

leasi,var5

movbx,offsetvar2

mov[si],0abh

movax,var1+2

mov[bx],[si]

movvar5+4,var4

movah,4ch

int21h

codeends

endstart

(3)写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AGUEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG中的SUM中。

其中AUGEND,ADDEND,SUM均为dw类型,AUGEND赋值为9251,ADDEND赋值为-5962。

实验报告中要求写出源程序,简单叙述上机步骤,调试方法。

调试步骤(详见书P146~153)

1.编辑源程序,建立一个以后缀为.asm的文件.

2.汇编源程序,编译:

c:

\MASM5\masmxxxx.asm检查程序有否错误,有错时回到编辑状态,修改程序中错误行。

无错时继续第3步。

3.连接目标程序,产生可执行程序。

连接:

c:

\MASM5\linkxxxx.obj

4.运行:

c:

\MASM5\xxxx..exe

5.调试:

c:

\winnt\system32\debugxxxx.exe

1)先用命令U反汇编整个程序,查看每条指令的物理地址,其显示内容的含义为:

内存地址指令代码反汇编的程序代码

-u0B75:

00001EPUSHDS

2)再用-t命令单步执行,检查各个寄存器的值变化情况

6.DEBUG调试可执行程序,记录数据段和附加段的内容。

(4)数组中是一组无符号数,将最小数放在M单元中,经过汇编后,形成.EXE文件,先用G=0命令执行程序,用-D命令查看M单元的内容,会发现结果不正确。

用单步执行命令T查找程序中的逻辑错误。

DSEGSEGMENT

MSGDB13,15,7,25,24

MDB?

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVCX,4

MOVAL,MSG

MOVSI,OFFSETMSG+1

L1:

CMPAL,[SI]

JBNEXT

MOVAL,[SI]

NEXT:

LOOPL1

MOVM,AL

MOVAX,4C00H

INT21H

CSEGENDS

ENDSTART

 

(5)试编制一个汇编语言程序,求出首地址为DATA的10个无符号字数组中的最小偶数,把它存放在AX中。

画出程序框图,写出源程序清单和执行结果。

Dataword0141H,0AE00H,07B4H,0A508H,0691H,

word0870H,7542H,0081H,0916H,0017H

(6)有10个数,统计正数的个数,存放在变量M中。

经过汇编后,形成.EXE文件,先用G=0命令执行程序,用-D命令查看M单元的内容,会发现结果不正确。

用单步执行命令T查找程序中的逻辑错误,注意每一次循环中AL寄存器中的值变化是否正确(AL寄存器中存放正数的个数)

DSEGSEGMENT

MSGDB4,-2,-6,0,5,67,8,-3,5,6

MDB?

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVCX,10

MOVAL,0

LEASI,MSG

L1:

MOVBL,[SI]

CMPBL,0

JBENEXT

INCAL

NEXT:

INCSI

LOOPL1

MOVM,AL

MOVAX,4C00H

INT21H

CSEGENDS

ENDSTART

(7)假设有一组数据:

5,-4,0,3,100,-51请编一程序,判断:

每个数大于0,等于0,还是小于0;并将最终结果存于以result为存储的字节单元中,(ResultDB6dup(?

))

即:

1当x>0

y=0当x=0

-1当x<0

编程提示:

1.首先将原始数据装入起始地址为XX的字节存储单元中。

2.其中判断部分可采用CMP指令,得到一个分支结构,分别输出“y=0”,“y=1”,“y=-1”。

将结果存入result的相应单元

3.程序中存在一个循环结构,循环6次,调用6次分支结构后结束。

(8)数据段中的三个字符,调用子程序将其逐个显示出来。

子程序的功能是显示一个字符。

单步执行,观察SP、IP的变化,并用D命令查看栈顶的内容。

DATASEGMENT

MAGDB'ABC'

DATAENDS

STACK_SEGSEGMENT

DB100DUP(?

TOSLABELWORD

STACK_SEGENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK_SEG

START:

MOVAX,STACK_SEG

MOVSS,AX

MOVSP,OFFSETTOS

MOVAX,DATA

MOVDS,AX

MOVSI,0

MOVCX,3

LL:

MOVDL,MAG[SI]

CALLMADD

INCSI

LOOPLL

MOVAx,4C00H

INT21H

MADDPROC

MOVAH,02H

INT21H

RET

MADDENDP

CODEENDS

ENDSTART

(9)将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元,如二进制数10010011转换成字符串为‘10010011’。

要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。

(用寄存器或变量实现参数传递)

测试数据:

Var8bitbyte10010011B

Var16bitword1010001111000100B

显示单元:

Show8bitbyte8dup(?

Show16bitbyte16dup(?

 

(10)将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元,如二进制数10010011转换成字符串为‘10010011’。

要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。

(用堆栈实现传参:

可以选择用子过程来平衡堆栈,也可以用调用过程来实现平衡堆栈,程序功能说明中要指出)

测试数据:

Var8bitbyte10010011B

Var16bitword1010001111000100B

显示单元:

Show8bitbyte8dup(?

Show16bitbyte16dup(?

实验报告要求:

1.程序说明。

说明程序的功能、结构。

2.调试说明。

包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

3.写出源程序清单和执行结果。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1