文档视界 最新最全的文档下载
当前位置:文档视界 › 实验2-汇编语言上机环境及基本操作

实验2-汇编语言上机环境及基本操作

实验2-汇编语言上机环境及基本操作
实验2-汇编语言上机环境及基本操作

实验二汇编语言上机环境及基本操作

一、实验目的及要求

1. 掌握汇编语言源程序的书写格式和要求

2. 掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

3. 学会使用记事本、MASMLINK、DEBU与软件工具。

4. 掌握将数据和代码都放在代码段的程序设计方法。

5. 掌握将数据和代码放不同段的程序设计方法。

6 .掌握用LOOP旨令构建循环程序

二、实验内容

1 .练习:计算机上建立、汇编、连接、调试及运行程序的方法编写程序,计算2A1

2 1)在D盘建立一文件夹,命名(例如101),将MASM.EXE LINK.EXE复制到此文件火;在此文件夹中新建文本文件,文件名改为汇编源程序名,例如:2e12.asm 用记事本打开2e12.asm,输入源程序并保存。

源程序:

assume cs:code

code segment

mov ax,2

mov cx,11

s: add ax,ax

loop s

mov ax,4c00h

int 21h code ends end

2)汇编源程序

点开始菜单,点运行,输入CMDE回车,进入命令提示符窗口;

输入D:并回车,打开D盘,再输入CD 101并回车,进入101文件夹;

输入MASM 2e1拼回车,一路按回车,进行汇编

汇编过程的错误分警告错误(Warning Errors )和严重错误(Severe Errors )两种。其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认

为无法进行正确汇编的错误,并给出错误的个数、错误的性质。这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。汇编通过后,会生成目标文件2e12.obj

3)连接目标程序、

输入LINK 2e12并回车,一路按回车

连接成功后,会生成可执行文件2e12.exe

4)跟踪并调试可执行程序

输入DEBUG 2e12.exe^按回车,进入DEBUGI试程序

单步运行程序,跟踪程序,每执行一条指令,检查相关寄存器或存储器的数据,看看程序是否按我们的意愿运行,若有出入,修改源程序,重新汇编、连接、运

行调试,直到成功

编写程序计算100X 300,用循环结构实现

完成否?

2.将数据和代码都放在代码段的程序设计方法

程序功能:将8个字数据累加求和,存入AX

便丁大家检查验证,将8个字设为1, 2, 3, 4, 5, 6, 7, 8

assume cs:codesg

codesg segment

dw 1,2,3,4,5,6,7,8

start : mov bx,0

mov ax,0

mov cx,8

s: add ax,cs:[bx]

add bx,2

loop s

mov ax,4c00h

int 21h

codesg ends

end start

调试程序,结果是否正确?

若将程序中的标号start去掉,结果如何?

add ax,cs:[bx] 语句中段前缀为什么用C§能去掉吗?能改为DS吗?

3 .将数据和代码都放在不同的段,实现题2的功能

assume cs:codesg,ds:datasg

datasg segment

array dw 1,2,3,4,5,6,7,8

datasg ends

codesg segment

start :

mov ax,datasg

mov ds,ax

mov bx,offset array

mov ax,0

mov cx,8

s: add ax,ds:[bx]

add bx,2

loop s

mov ax,4c00h

int 21h

codesg ends

end start

调试程序,结果如何?

比较3和2的源程序,多段程序设计与单一段程序设计

4.对题3的程序稍做修改,求出8个数中的最小数和最大数分别存入MIN和MAX 单元(若能力有限,只求其中之一)

提示:用比较指令(P62)结合条件转移指令(P89),产生不同的程序分支 要求简要描述解题思路,源程序要加上必要的注释。范例:

;在ADD 即元中存放着数Y 的地址

;功能:将Y 中1的个数存入COUN*元

;测试数据存丁 CS:2字单元

;测试1:修改CS:2字单元内容为0007H,结果为3

;测试2:修改CS:2字单元内容为0FFFFH 结果为10H

;解题思路:从高到低逐位判断是否为1,累计1的个数到CX

;左移16次,根据符号位可实现上述功能

;并且左移16次后,数必然为0,刚好作为循环结束条件

CODE SEGMENT

ASSUME CS:CODE

ADDR DW NUMBER

NUMBER DW ?

COUNT DW ?

START:

MOV CX,0

MOV BX,ADDR

MOV AX,CS:[BX]

REPEAT:TEST AX,0FFFFH

;数为0,结束循环 ;若符号位为1,1的个数加1

;左移,逐位移入符号位位置判断

MOV AX,4C00H INT 21H

CODE ENDS

END START

JZ EXIT JNS SHIFT INC CX SHIFT: SHL AX,1 JMP REPEAT

EXIT: MOV COUNT,CX

相关文档