汇编语言上机实验报告(一)

汇编语言上机实验报告(一)
汇编语言上机实验报告(一)

汇编语言上机实验报告(一)

李昌健

学号:U201010153

专业:应用物理学1001班

时间:2013年5月16日

地点:南一楼

实验一

在一个以BUF为首址的缓冲区中存放着字符串'How are you'。

请写一个程序,将该字符串倒转。倒转后的字符串放在一个新缓冲区中。

使用TD观察程序运行结束前,是否实现了上述功能。

提示:变量可用如下伪指令定义

BUF DB ‘How are you'

N = $ - BUF ; N为字符串的长度

NEW_BUF DB N DUP(0)

操作提示:使用TD.EXE调试程序时,应先单步执行各个语句,每执行一条语句,都应观察数据段中的内容以及相应寄存器的变化。

二实验要求

掌握基本的程序设计框架和方法、熟悉常用指令的用法、熟悉DOS功能调用、进一步掌握TD的使用方法。

三寄存器分配和变量定义说明

本题利用LOOP做循环,逐一将BUF中的字节复制到NEW_BUF中。

1 存储单元分配

BUF:存放初始串’how are you ’

NEW_BUF:存放复制的字符串

2寄存器分配

BX: BUF 的偏移地址

BP:NEW_BUF的偏移地址

CX:记录循环次数

SI,DI:分别用作BUF和NEW_BUF的变址寄存器

AX:临时寄存器

四流程图

五源代码

DATA SEGMENT

BUF DB 'How are you'

N=$-BUF

NEW_BUF DB N DUP(0)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA

MOV DS,AX

MOV BX,OFFSET BUF

MOV BP,OFFSET NEW_BUF

MOV CX,N

MOV SI,CX

MOV DI,0

DEC SI

LINE: MOV AL,[BX+DI]

MOV DS:[BP+SI],AL INC DI

DEC SI

LOOP LINE

CODE ENDS

END START

六运行结果

用td调试程序,可以看到在数据段里NEW_BUF已经存放了倒置的BUF.

实验二

一题目

假设数据段定义如下:

DATA SEGMENT

STRING DB ‘The Personal Computer & TV’

DATA ENDS

试用字串操作等指令编程完成一下功能:

(1)把该字符串传送到附加段中偏移量为GET_CHAR开始的内存单元中。

(2)比较该字符串是否与’The Computer’相同,若相同则将AL寄存器的内容置1,否则置0.并要求将比较次数送到BL寄存器中

(3)检查该字符串是否有‘&’符,若有则用空格符将其替换。

(4)把字符串大写字母传送到附加段中CAPS开始的单元中,其余字符传到以CHART开始的单元中。然后将数据段中存储上述字符串的单元清零。

二实验要求

掌握基本的程序设计框架和方法、熟悉常用指令的用法、熟悉DOS功能调用、进一步掌握TD的使用方法。学会熟练适用字符串操作指令。

三寄存器分配和变量定义说明

本题利用字符串操作指令MOVSB,CMPSB,SCASB等实现字符串的传递,比较,搜索等功能。

1 变量定义说明

(1)对于第一问,数据段中STRING用于存放初始字符串,附加段中GET_CHAR用于存放复制后的字符串。

(2)对于第二问,附加段中COM用于存放待比较的字符串’The Computer’。

(3)对于第三问,没有用到附加段,只是用到了数据段中的初始字符串STRING。

(4)对于第四问,附加段中CAPS用于存放大写字母,CHART用于存放其他字母。

2寄存器分配

SI:存放源串的偏移地址。

DI:存放目串的偏移地址。

CX:存放循环计数值。

AX,BX:临时使用的的寄存器。

四流程图

(1)

开始

将STRING 偏移地址赋给SI,将

GET_CHAR偏移地址赋给DI,将

STRING的长度赋给CX。

利用MOVSB进行数据传递

结束

(3)

开始

将’&’赋给AX

利用SCASB查询是否有&

将找到的&替换为空格

结束

五源代码

DATA SEGMENT

STRING DB 'The Personal Computer & TV' N EQU $-STRING

DATA ENDS

HELLO SEGMENT

GET_CHAR DB 100 DUP(0)

CAPS DB 100 DUP(0)

CHART DB 100 DUP(0)

COM DB 'The Computer'

COMPARE DB 0

NUMBER DB 0

HELLO ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:HELLO

START: MOV AX,DATA

MOV DS,AX

MOV AX,HELLO

MOV ES,AX

MOV CX,N

LEA SI,STRING

LEA DI,GET_CHAR

CLD

REP MOVSB

MOV BL,0

MOV CX,N

CMP CX,12

JNE LINEB

MOV AL,1

LEA SI,STRING

LEA DI,COM

MOV BX,CX

REPE CMPSB

JNE LINEA

JMP LINEC

LINEA: MOV AL,0

SUB BX,CX

JMP LINEC

LINEB: MOV AL,0

LINEC: MOV COMPARE,AL

MOV NUMBER,BL

MOV AX,DATA

MOV ES,AX

MOV AL,'&'

LEA DI,STRING

MOV CX,N

CLD

REPNE SCASB

JZ CHANGE

JMP LINED

CHANGE: MOV BYTE PTR DS:[DI-1],' ' LINED: MOV AX,DATA

MOV DS,AX

LEA SI,STRING

LEA DI,CAPS

LEA BX,CHART

MOV CX,N

CLD

LINEF: LODSB

CMP AL,41H

JB LINEG

CMP AL,5AH

JA LINEG

STOSB

MOV BYTE PTR [SI-1],0

JMP LINEH

LINEG: XCHG BX,DI

STOSB

XCHG BX,DI

MOV BYTE PTR [SI-1],0

LINEH: LOOP LINEF

CODE ENDS

END START

六运行结果

(1)运行后将原字符串放在了附加段偏移地址为0000的区域,如下

(2)由于两字符串长度为零,所以不相等,比较次数为零。

(3)运行后已将&替换为空格,如下

(4)运行后已将大写字母放在一起,其他字母放在另一区域,如下

实验三

一题目

编程将AX寄存器中的内容以相反的次序传送到DX寄存器中,并要求AX中的内容不被破坏,然后统计DX寄存器中1的个数是多少。

二实验要求

掌握基本的程序设计框架和方法、熟悉常用指令的用法、熟悉DOS功能调用、进一步掌握TD的使用方法。熟练掌握移位指令的使用。

三寄存器分配和变量定义说明

本题先将AX中的数据循环右移,每移一位,都将移出位从DX右端移入,这样移动16次后DX便是AX的倒转的数。

1 变量定义说明

数据段中的PRINT,HELLO,KITTY是用来存放一些用于输出的字符串。

2寄存器分配

AX:用于存放原始数据

DX:用于存放倒转后的数据

BL:记录DX中1的个数

CX:记录循环次数

四流程图

开始

对AX,CX,BL进行初始化

循环右移AX

如果移出位为1,则

BL加1

通过进位位循环左移DX

CX=0?

结束

五源代码

DATA SEGMENT

PRINT DB 'The number of 1 in DX is :$'

HELLO DB 0DH,0AH,'$'

KITTY DW 0

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AX,34H

MOV CX,16

MOV BL,0

LINEA: ROR AX,1

JC LINEB

JMP LINEC

LINEB: INC BL

LINEC: RCL DX,1

LOOP LINEA

MOV KITTY,DX

LEA DX,PRINT

MOV AH,9

INT 21H

MOV DL,BL

ADD DL,30H

MOV AH,2

INT 21H

LEA DX,HELLO

MOV AH,9

INT 21H

MOV AX,4C00H

INT 21H

CODE ENDS

END START

六运行结果

程序运行后可以看到DX中是AX的反转,如下所示

并且将DX中的1的个数输出,如下图中最后一行:

实验四

一 题目

将以BUF 为首地址的字节存储区中的既能被2整除也能被7整除的无符号整数的个数(假定≤9)显示出来,同时对应的显示它们分别对应的地址偏移量。

二 实验要求

掌握基本的程序设计框架和方法、熟悉常用指令的用法、熟悉DOS 功能调用、进一步掌握TD 的使用方法。

三 寄存器分配和变量定义说明

本题将0-255中能被2和7整除的数列表,对于需要检测的数,将其和该表逐一对比,可知其是否能被2和7的整除。

1变量定义说明

数据段中STAND 用于存放0-255中能被2和7整除的数,NUMBER 用于存放待检测的数。其他变量用于显示输出。 2寄存器分配

DI :用于存放目的串偏移地址 CX :用于记录循环次数 BX,DX,AX :临时使用

四流程图

五 源代码

DATA SEGMENT

NUMBER DB 0,7,14,25,72,56,70

开始 取NUMBER 中待检测的数

检测是否与STAND 中的数相同

CX=0?

结束 是 否

NA EQU $-NUMBER

STAND DB

0,14,28,42,56,70,84,98,112,126,140,154,168,182,196,210,224,238,252 NB EQU $-STAND

PRINTA DB 'Number','$'

PRINTB DB 'Address','$'

PRINTC DB 0DH,0AH,'$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA

START: MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AH,9

LEA DX,PRINTB

INT 21H

LEA DX,PRINTC

INT 21H

MOV CX,NA

MOV BX,0

MOV SI,0

LINEA: MOV AL,[BX]

LEA DI,STAND

PUSH CX

MOV CX,NB

REPNE SCASB

JZ LINEB

JMP LINEC

LINEB: MOV AH,2

MOV DL,BL

ADD DL,30H

INT 21H

MOV AH,9

LEA DX,PRINTC

INT 21H

INC SI

LINEC: POP CX

INC BX

LOOP LINEA

MOV AH,9

LEA DX,PRINTA

INT 21H

LEA DX,PRINTC

INT 21H

MOV DX,SI

ADD DL,30H

MOV AH,2

INT 21H

MOV AX,4C00H

INT 21H

CODE ENDS

END START

六运行结果

在下面给出了程序运行的结果。首先给出即可被2整除,又可被7整除的数的偏移地址,后面给出这些数的个数。

上机心得:

编程实在太痛苦了!!!

汇编语言程序上机过程

汇编语言程序上机过程 实验目的: 1、掌握常用工具软件 PE,MASM和LINK的使用。 2、伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。 3、利用的 1号功能实现键盘输入的方法。 4、了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法。 程序: datasegment messagedb'This is a sample program of keyboard and disply' db0dh,0ah,'Please strike the key!',0dh,0ah,'$' dataends stacksegmentpara stack 'stack' db50 dup(?) stackends codesegment assumecs:code,ds:data,ss:stack start:movax,data movds,ax movdx,offset message movah,9 int21h again:movah,1 int21h cmpal,1bh jeexit cmpal,61h jcnd cmpal,7ah jand andal,11011111b nd:movdl,al movah,2 int21h jmpagain

exit:movah,4ch int21h codeends endstart 实验步骤: 1、用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。 2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。 3、用TYPE命令显示1产生的.LST文件。 4、用LINK将.OBJ文件连接成可执行的.EXE文件。 5、在DOS状态下运行LINK产生的。EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。 实验报告: 1、汇编,连接及调试时产生的错误,其原因及解决办法。 2、思考: 1)若在源程序中把INT 21H的'H'省去,会产生什么现象? 2)把 INT 21H 4CH号功能改为 INT 20H,行不行?

汇编语言上机操作

汇编语言上机操作 一、建立子文件夹 如:D:\hb\masm 二、复制相关文件 把masm.exe、link.exe、ml.exe三个文件复制到上述文件夹中。 三、进入DOS方式 开始/运行/cmd 当前提示符可能是: C:\documents and settings\administrator> 四、常用DOS操作命令 1、改变当前盘 输入d: 并回车,屏幕显示: D:\> 2、改变当前目录 1)进入下一级目录 D:\>cd hb 回车后,屏幕显示: D:\hb>cd masm 回车后,屏幕显示: E:\hb\masm> 问题:可以一次进入下面二级或多级目录吗? 2)返回上一级目录 D:\hb\masm>cd.. 回车后,屏幕显示: D:\hb\>cd.. 回车后,屏幕显示: D:\> 问题:可以直接返回根目录吗? D:\hb\masm>cd\ 回车后,屏幕显示: D:\> 3、显示当前目录容 D:\>dir /p 分页显示当前目录容 问题:如何显示d:\text中的容? D:\>dir d:\text↙ 4、DOS方式下如何运行程序? DOS方式下的可执行文件(即程序文件)扩展名为.exe或.,运行时只需要在系统提示符下输入文件主名即可。例如,有一个文件名为test.exe,存入在D:\hb\masm 中,运行时,可以这样做: D:\hb\masm>test↙ 五、汇编语言上机过程 1、编辑源程序 运行:edit 回车后,进入EDIT环境,输入完后存盘(file/save)并退出(file/exit)。

2、汇编 D:\hb\masm>masm add5.asm↙ 生成目标程序文件add5.obj。(如果有语法错误,会提示错误所在行号和错误类型)3、连接 D:\hb\masm>link add5↙ 生成可执行文件add5.exe。 六、DEBUG程序调用及汇编语言程序调试方法 调试程序DEBUG是DOS支持的又一种系统软件,主要用于汇编语言程序的调试。汇编和连接过程只能查出源程序的语法错误,不能查出功能上的错误和程序不完善的地方。DEBUG程序为用户提供多种命令,大致有:显示和修改寄存器和存贮单元的容;执行程序中任意一段或一条指令;汇编单条源语句和反汇编机器码指令;查找字符代码;端口的输入和输出;文件装入存和写入磁盘等。用户利用这些命令可以查出任何程序功能上的错误。下面说明DEBUG程序的启动方法和主要命令意义。 (一)DEBUG程序的启动 DEBUG程序有两种启动方法。DEBUG程序是在DOS盘上的一个独立的可执行程序(扩展名为.COM),所以,DEBUG程序的第一种启动方法就是把它看作和一般的可执行程序一样,只要打入DEBUG和回车键,就可以把它装入存。但是这样启动只把DEBUG 程序本身装入存并进入等待DEBUG命令状态,还没有把要调试的程序装入存。第二种启动DEBUG的程序的方法是一次相继装入DEBUG程序和要调试的程序。打入的命令格式如下: DEBUG[d:][path]filename[.ext][parml][parm2] 其中的Filename是要调试程序的文件名,可选项[d:][path]和[.ext]分别是要调试程序的所在盘符、路径和扩展名。可选项[parml]和[parm2]是DEBUG程序为要调试程序准备的参数(一般不用)。 例进入DEBUG程序并装入要调试程序。其操作如下: D:\hb\masm>DEBUG add5.exe (进入DEBUG,并装配add5.exe) 此时屏幕上出现一个短线,这表示可以使用DEBUG命令了。 如果启动DEBUG时没有指定要调试的文件名,则需要用N命令指定要调试的文件,再用L命令将其装入存。操作如下: D:\hb\masm>debug↙ - n add5.exe↙ - l↙ (二)DEBUG命令 在说明每个命令之前,先说明一些共同信息: ■DEBUG命令都是以一个英文字母开头,后面跟一个或多个参数。 ■命令字母和参数可用大写或小写或混合形式。 ■命令字母和参数中,相邻两个十六进制之间必须用逗号或空格分开.其它各部分之间有无空格或逗号都可以。 ■执行任何命令期间都可用Ctrl+Break键方法结束命令的执行。

山东大学汇编语言上机实验——实验二

程序的基本结构练习 一:循环程序设计 一、实验目的 (1) 加深对循环结构的理解; (2) 掌握循环程序的设计方法; (3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。 二、实验内容 1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。 2.设STR字符串是以0结尾。试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。 3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。三、算法描述流程图 实验内容1、2、3的流程图分别为图1、图2、图3。

四、实验步骤 1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。1)输入源程序: DA TA SEGMENT BUF DW 23,123,-12,-210,45,0,90,-453 BUF1 DW 8 DUP(0) BUF2 DW 8 DUP(0) A DW B DW DA TA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DA TA START: MOV AX, DATA MOV DS, AX LEA BX, BUF LEA SI, BUF1 LEA DI, BUF2 MOV A,0 MOV B,0 MOV CX,8 L0: MOV AX,[BX] CMP AX,0 JGE L1 MOV [DI],AX ADD DI,2 INC B JMP NEXT L1: MOV [SI],AX ADD SI,2 INC A NEXT: ADD BX,2 LOOP L0 MOV AH, 4CH INT 21H CODE ENDS END START 2)运行程序。 3)检查结果无错误后将结果记录下来。 2.设STR字符串是以0结尾。试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。 1)输入源程序: DA TA SEGMENT STR DB 'HOW arE YoU!',0 DA TA ENDS

汇编语言上机实验十2015李中

实验十输入/输出与中断实验 一、实验目的 1.掌握输入/输出与中断指令的使用方法; 2.掌握中断向量表的结构及使用方法; 3.掌握INT 指令的使用方法; 4.掌握BIOS 中断功能调用的使用方法; 5.掌握DOS 功能调用的使用方法。 二、实验要求 1.了解INT 指令与CALL 指令的不同点; 2.会用DEBUG 观察中断向量表; 3.会用DEBUG 的T 和P 命令执行INT 指令; 4.会用INT 10H、INT 16H 编制程序; 5.会用DOS 功能调用的02H、09H 功能编制程序 三、实验题目 1. 编制程序。利用IBM PC BIOS 功能调用的INT 16H 功能,编制一个从键盘上接收若干个字符串的程序。 2.编制程序。利用IBM PC BIOS 功能调用的INT 10H 功能,编制一个在屏幕上指定位置显示若干个字符串的程序。 四、实验思路 1调用INT16号功能实现输入字符,并且用int10号功能实现显示字符,并且将字符保存到data开始的内存单元中,如果不是ctrl+c的话循环输入输出,是的话结束程序.

2用INT10中03功能读出当前光标位置,然后保存当前的光标位置,只有用INT10中的02号功能设置要显示字符的位置,调用INT10的0E号功能循环显示字符,遇到结尾符号0的时候结束输出,然后恢复光标位置,调用INT10的1号功能恢复光标类型,用INT10的2号功能设置光标位置,使光标位置回到起点,结束程序. PUSH DX;保存当前光标位置 PUSH CX;保存光标类型 MOV DX,1020H;设置光标位置 MOV AH,02H INT 10H;设置光标位置 五、实验程序 1 DSEG SEGMENT;数据段开始 DATA DB 80 DUP (0);存储数据的单元 DSEG ENDS ;数据段结束 CSEG SEGMENT;代码段开始 ASSUME CS:CSEG,DS:DSEG;段假设 START: MOV AX,DSEG MOV DS,AX;段地址初始化

实验一熟悉汇编语言上机环境.pdf

实验一熟悉汇编语言上机环境 一、实验目的 熟悉在微机上建立、汇编、连接、调试和运行汇编语言程序的全过程。 二、实验要求 1.仔细阅读本实验教程的第一章和第二章; 2.学会使用EDIT建立汇编语言源程序文件; 3.学会使用MASM将汇编语言源程序编译为目标程序的两种方法; 4.学会使用LINK将目标程序连接为可执行程序的两种方法; 5.学会使用DEBUG中的U、D、G命令。 三、实验举例 【例3.1】 编辑、汇编、连接、执行下列程序,观察实验结果。 【程序功能】该程序的功能是利用BIOS功能调用,从键盘上接收若干个字符,并将它们的ASCII码与键盘扫描码以十六进制的形式显示出来,当按下+键时,停止程序的执行。 【步骤一】 用EDIT编辑源程序,并以EXAM1.ASM为文件名存入磁盘。 程序清单如下: SSEG SEGMENT STACK STK DB 80H DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,SS:SSEG HTOA PROC NEAR ;该子程序的功能是将AL内容转换为ASCII码 AND AL,0FH CMP AL,10 JC HTOA1 ADD AL,07 HTOA1: ADD AL,30H RET HTOA ENDP BHTOA PROC NEAR ;该子程序的功能是将AL内容转换为ASCII码 PUSH CX MOV CH,AL MOV CL,04 SHR AL,CL CALL HTOA MOV AH,AL MOV AL,CH CALL HTOA POP CX RET BHTOA ENDP DISASC PROCN EAR ;该子程序的功能是在光标处显示AL中的字符 PUSH AX

实验3-汇编语言程序上机过程

实验3 汇编语言程序上机过程 3.1 实验目的 (1)掌握常用工具软件EDIT,MASM,和LINK的使用。 (2)伪指令:SEGMENT ,ENDS,ASSUME,END, OFFSET,DUP. (3)利用INT 21H的1号功能实现键盘输入的方法。 (4)了解.EXE和.COM文件的区别及用INT 21H 4C号功能返回系统的方法。 3.2 实验类型 验证型实验 3.3 实验内容 data segment message DB 'THIS IS A SAMPLE PROGRAM OF KEY AND DISPLAY' DB 0DH, 0AH, 'PLEASE STRIKE THE KEY!', 0DH, 0AH,'$' data ends stack segment PARA STACK'STACK' DB 50 DUP(?) stack ends code segment assume CS:COE, DS:DATA, SS:STACK start: mov ax, data mov ds, ax mov dx, OFFSET MESSAGE mov ah, 9 INT 21h ; add your code here AGAIN: MOV AH,1 INT 21H CMP AL,61H JE ND CMP AL,61H JC ND CMP AL,74H JA ND AND AL,11011111B ND: MOV DL,AL MOV AH,2 INT 21H JMP AGAIN EXIT: MOV AH,4CH INT 21H CODE ENDS END START

汇编语言上机实验汇总

汇编语言程序设计的实验环境及实验步骤 知识提要: 1、汇编语言源程序编写好以后, (1) 编辑源程序(生成 .ASM (2) 汇编源程序(.ASM → .OBJ (3) 连接目标程序(.OBJ → .EXE (4) 调试可执行程序(使用调试程序Debug 调试生成的.EXE 文件) (5) 运行程序输出结果。 2、 Windows 环境下的汇编语言集成编程环境的使用 实验一 汇编语言上机实验(一) 一、实验要求和目的 1、掌握汇编语言程序设计的基本方法和技能; 2、熟练掌握使用全屏幕编辑程序EDIT 编辑汇编语言源程序; 3、熟练掌握宏汇编程序MASM 的使用; 4、熟练掌握连接程序LINK 的使用。 二、软硬件环境 1、硬件环境:微机CPU 486以上,500MB 以上硬盘,32M 以上内存; 2、软件环境:装有MASM 、DEBUG 、LINK 等应用程序。 三、实验内容与步骤 1、实验内容 编写程序,判断一个年份是否是闰年。 2、实验步骤 汇编语言程序设计上机过程如图1.1所示。 图1.1 汇编语言程序上机过程 (一)用编辑程序EDIT 建立汇编语言源程序文件(ASM 文件)

建议源程序存放的目录名为MASM中,MASM子目录在D盘的根目录下。 可以在DOS模式下用编辑程序EDIT.EXE建立汇编语言源程序文件ABC.ASM,注意文件名的扩展名必须是.ASM。也可以在Windows 2000或者在Windows XP环境下鼠标单击“开始”→“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如:C:\documents and settings\administrator>cd\ *进入C盘根目录 C:\>d: *进入D盘 D:\>md masm *在D盘创建MASM文件夹D:\>cd masm *进入MASM文件夹 D:\masm>edit run.asm *建立run源文件 进入EDIT的程序编辑画面时,编写程序,判断一个年份是否是闰年的汇编语言源程序,输入汇编语言源程序如下: DATA SEGMENT INFON DB 0DH,0AH,'Please input a year: $' Y DB 0DH,0AH,'This is a leap year! $' N DB 0DH,0AH,'This is not a leap year! $' W DW 0 BUF DB 8 DB ? DB 8 DUP(?) DATA ENDS STACK SEGMENT 'stack' DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX LEA DX,INFON MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H MOV CL, [BUF+1] LEA DI,BUF+2 CALL DATACATE CALL IFYEARS JC A1 LEA DX,N MOV AH,9 INT 21H JMP EXIT A1: LEA DX,Y MOV AH,9 INT 21H EXIT: MOV AH,4CH INT 21H DATACATE PROC NEAR

8086汇编语言上机调试步骤

8086汇编语言上机调试步骤 1、在网络课堂-微机原理与接口技术-实验指导-汇编工具下载,下载汇编工具并解压,文件夹名为“masm”。 2、用鼠标点击“masm”文件夹。进入该文件夹后将看到 MASM.EXE, LINK.EXE , DEBUG.EXE3个文件进行复制操作。 3、用鼠标点击“我的电脑”再点击D: 盘,并在 D: 盘上建立新的“ MASM”文件夹,最后将上面的3个文件全部复制到该文件夹中。(注意实验所有的文件都放在该文件夹内) 4、用文本编辑软件UltraEdit-32、WINDOWS 中的记事本或其它的文本编辑器输入汇编语言程序, 注意在最后一行的 END输入完后要按一次回车键,保存的源 文件的扩展各一定要是“.asm”如: example.asm 。(建议用记事本输入源程序,另存时,保持类型选择“所有文件”如图所示) 5、进入MS-DOS方式 ( 从开始>程序>附件>命令提示符) 或者(从程序 > 运行输入“cmd”回车,进入MS-DOS环境。

6、进入D:>MASM文件夹 7、显示MASM文件夹内所有文件“dir”命令 8、在 DOS 提示符下进行汇编、连接、动态调试等操作。 例如: 对源文件 example.asm 进行的操作

D:\MASM\MASM example.asm;汇编源程序操作 D:\MASM\LINK example.dbj;连接并生成扩展名为 .EXE 的可执行文件 D:\MASM\DEBUG example.exe;对可执行文件进行调试 9、要求掌握的调试命令(在 DEBUG 中使用的命令) a: U - 反汇编命令 用法: -U 代码段地址:起始偏移地址如:-U CS:100 b: D - 显示内存中的数据命令 用法: -D 数据段地址:存放数据的偏移地址如:-D DS:00 20 c: T - 单步执行程序命令 用法: -T 要执行的指令条数如:-T 3 d: G - 连续执行程序命令 用法: -G=代码段地址:指令的起始偏移地址指令的结束偏移地址如: -G=CS:100 106 注意: 结束地址一定要是操作码的所在地址 e: R - 查看和修改寄存器数据命令 用法: -R 回车如:-R AX f: F - 对内存单元填充数据命令 用法: -F 数据段地址:偏移首地址偏移未地址填入的数据 如: -F DS:100 120 ff g: Q - 退出”DEBUG“应用程序命令 10、应用例子 ;二进制到BCD转换(a.asm) ;将给定的一个二进制数,转换成二十进制(BCD)码 DATA SEGMENT RESULT DB 3 DUP(?) DATA ENDS CODE SEGMENT

汇编语言上机实验

汇编语言程序设计的实验环境及实验步骤 知识提要: 1、汇编语言源程序编写好以后,必须经过下列几个步骤才能在机器上运行: (1) 编辑源程序(生成.ASM文件) (2) 汇编源程序(.ASM → .OBJ) (3) 连接目标程序(.OBJ → .EXE ) (4) 调试可执行程序(使用调试程序Debug调试生成的.EXE文件) (5) 运行程序输出结果。 2、Windows环境下的汇编语言集成编程环境的使用 实验一汇编语言上机实验(一) 一、实验要求和目的 1、掌握汇编语言程序设计的基本方法和技能; 2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序; 3、熟练掌握宏汇编程序MASM的使用; 4、熟练掌握连接程序LINK的使用。 二、软硬件环境 1、硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存; 2、软件环境:装有MASM、DEBUG、LINK等应用程序。 三、实验内容与步骤 1、实验内容 编写程序,判断一个年份是否是闰年。 2、实验步骤 汇编语言程序设计上机过程如图1.1所示。 图1.1 汇编语言程序上机过程 (一)用编辑程序EDIT建立汇编语言源程序文件(ASM文件)

建议源程序存放的目录名为MASM中,MASM子目录在D盘的根目录下。 可以在DOS模式下用编辑程序EDIT.EXE建立汇编语言源程序文件ABC.ASM,注意文件名的扩展名必须是.ASM。也可以在Windows 2000或者在Windows XP环境下鼠标单击“开始”→“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如:C:\documents and settings\administrator>cd\ *进入C盘根目录 C:\>d: *进入D盘 D:\>md masm *在D盘创建MASM文件夹D:\>cd masm *进入MASM文件夹 D:\masm>edit run.asm *建立run源文件 进入EDIT的程序编辑画面时,编写程序,判断一个年份是否是闰年的汇编语言源程序,输入汇编语言源程序如下: DATA SEGMENT INFON DB 0DH,0AH,'Please input a year: $' Y DB 0DH,0AH,'This is a leap year! $' N DB 0DH,0AH,'This is not a leap year! $' W DW 0 BUF DB 8 DB ? DB 8 DUP(?) DATA ENDS STACK SEGMENT 'stack' DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX LEA DX,INFON MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H MOV CL, [BUF+1] LEA DI,BUF+2 CALL DATACATE CALL IFYEARS JC A1 LEA DX,N MOV AH,9 INT 21H JMP EXIT A1: LEA DX,Y MOV AH,9 INT 21H EXIT: MOV AH,4CH INT 21H DATACATE PROC NEAR

汇编语言上机过程

第一步:编写程序 用记事本编写汇编语言程序,保存为.ASM 文件,保存时,保存类型选择“所有文件”。注意,应将汇编语言程序保存在包含MASM.EXE 及LINK.EXE 的目录下(本例中假定在C盘的MASM目录下,即“C:\MASM”)。 第二步:编译 进入DOS命令提示符环境。该环境的访问方法一:windows “开始”->“运行”,输入“cmd”),如下图: 访问方法二:windows “开始”->“程序”->“附件”->“命令提示符”,如下图所示:

进入DOS命令提示符方式: 用CD 命令进入MASM目录,如下图所示: (若个人的MASM目录在D盘下,可如下操作:)

回车后即进入存放有MASM.EXE LINK.EXE EX11.ASM 的目录D:\MASM : 现在开始用汇编程序MASM.EXE 编译汇编语言源程序EX11.ASM: 回车后开始编译:

若编译出现0处错误(如上图椭圆框内),则表示编译通过,正确生成EX11.OBJ文件: 接下来转入第四步。否则,若出现如下类似界面: 表示出现一处错误,该错误在EX11.ASM的第七行,错误为“出现未定义的符号AS”,则转入第三步。 第三步:编辑程序 用 EDIT.EXE 编辑出现错误的程序 EX11.ASM:

回车后,出现如下界面: 找到第7行,并修改相应错误。修改完成后,点击菜单“File”或用“ALT”回车打开“File”菜单,首先选择“Save”保存修改,然后选择“Exit”退出编辑状态: 重复如下编译过程,重新编译修改过的EX11.ASM,直至全部错误修改完成:

汇编语言实验报告

汇编语言实验报告 专业: 班级: 姓名: 学号: 2011年12月14日

目录 实验1 利用DEBUG调试汇编语言程序段 (3) 实验2 初级程序的编写与调试实验(一) (11) 实验3 初级程序的编写与调试实验(二) (20) 实验4 汇编语言程序上机过程 (28) 实验5 分支程序实验 (33) 实验6 循环程序实验 (40) 实验7 子程序实验 (45)

实验1 利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验内容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序 3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示内存数据D 段地址:偏移地址) 例1:-D100 ;显示DS段, 0100开始的128个节内容

说明: 指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。 ① D SEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容. ② D SEGREG[段地址:偏移地址] ;显示SEGREG段中(缺省内默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省内默认为128)个字节内容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节内容 -D CS:200 ;显示CS段, 0200H开始的128个字节内容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容 -D 200 ;显示DS段, 0200H开始的128个字节内容

汇编语言上机试验指导

作实验2 【1】.有空加作实验【4】(1). 实验2 算术及位串处理程序 【1】.在数据段预先存放16个十六进制数的ASCII码,把BX中的四位十六进制数,从左到右用查表的方法找到对应数位的ASCII码,并取出显示出来。 要求见书: 参考程序: data segment asc db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h db 41h,42h,43h,44h,45h,46h data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cl,4 rol bx,cl mov si,bx and si,0fh mov dl,[asc+si] mov ah,2 int 21h rol bx,cl mov si,bx and si,0fh mov dl,[asc+si] mov ah,2 int 21h mov ah,4ch int 21h code ends end start 【2】用字符串处理指令编制程序,处理字符串的比较和查找,显示结果。 要求:(1) 字符串的比较程序中,一个字符串在数据段定义,另一个字符串在程序执行时从键盘输入,必须定义键盘缓冲区。并指出不相等的位置。 参考书上例3.51,题目改为MESS2 定义为从键盘输入缓冲区,键盘输入缓冲区定义: mess2 DB 9,?,9 DUP(?) 例3.51 在数据段中有一个长度为19的字符串MESS1,在附加段中有一个长度为19的字符串MESS2,比较它们是否相等。若相等显示‘Y’,否则显示‘N’。编制程序如下所示。

汇编语言程序的上机过程

汇编语言的上机过程 汇编语言程序的上机过程包括编辑、汇编、连接和执行这四个步骤。汇编程序我们提供宏汇编程序MASM5.0和MASM6.14两个版本。 1、建立源程序文件 建立和编辑汇编语言源程序可以使用EDIT、记事本、写字本,也可以使用TC等来输入源程序。保存时,源程序文件的扩展名必须是ASM。 练习: (1)在DOS下用编辑软件EDIT建立如下源程序文件,将文件保存为Hello.ASM,保存在MASM5目录下。(调用命令“C:\EDIT”进入EDIT 编辑器。) 源程序文件如下: DSEG SEGMENT MESSAGE DB'HOW DO YOU DO?',0DH,0AH,24H DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG BEGIN: MOV AX,DSEG MOV DS,AX MOV DX,OFFSET MESSAGE MOV AH,9 INT21H

MOV AH,4CH INT21H CSEG ENDS END BEGIN (2)编程计算1+2+3+……+100,和放在AX寄存器中,要求用循环实现。 对于MASM5.0和MASM6.14两个版本,编译和连接的方法有所不同。以下分别就两个版本的编译和连接的方法进行讲解。 如果使用MASM5.0的话,操作方法如下(以HELLO.ASM源程序文件为例):2、对源程序进行汇编,生成目标文件HELLO.OBJ。 操作: (1)在DOS下进入MASM5.0的目录,如C:\MASM5> (2)敲入命令:MASM HELLO 说明: .obj文件:目标代码文件,纯二进制代码文件,不能直接显示在屏幕上。 .lst文件:包含源程序中各语句及其对应的目标代码,各语句的偏移量等相关信息,对调试程序有帮助,但一般情况不需要。 .crf文件:交叉索引文件,给出源程序中定义的符号引用情况,初学时不需建立。 3、连接目标文件,生成执行文件HELLO.EXE, 操作:敲入命令LINK HELLO 说明: .EXE文件:可执行文件 .MAP文件:连接映象文件,包括各个段在存储器中的分配情况,初学时不需要。

汇编上机实验

从键盘接收两个不大于5 的十进制数字,并以十进制数据形式显示其和。 编程提示: 该程序中要求的均为一位数据的输入输出,暂时不考虑多位数据,请输入0~5 之间的数据,显示的结果为0~9。请不要输入两个5,以免出现不能直接输出的情况。 data segment data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov ah,01h int 21h mov bl,al sub bl,30h ;将输入的数字变成16进制数后放在bl中 ;为了实现bl与cl的16进制数相加 mov dl,10 ;换行(10表示换行) mov ah,02h int 21h ;mov dl,13 ;回车(13表示回车,为的是让换行之后光标移到行首) ;mov ah,02h ;int 21h mov ah,01h int 21h mov cl,al sub cl,30h;将输入的数字变成16进制数后放在cl中 mov dl,10 mov ah,02h int 21h ;mov dl,13 ;mov ah,02h ;int 21h add cl,bl add cl,30h mov dl,cl mov ah,02h int 21h mov ax,4c00h int 21h code ends end start

1、试编写程序,完成下面公式的计算。 A ←(X-Y+24)/ Z的商, B ←(X-Y+24)/ Z的余数 其中,变量X和Y是32位有符号数,变量A、B、Z是16位有符号数。 DATA SEGMENT X DD 12345H ORG 10H Y DD 12345H ORG 20H Z DW 12H ORG 30H A DW ? B DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,WORD PTR X ;将X低四位放入AX中 MOV DX,WORD PTR X+2 ;将X高四位放入DX中 SUB AX,WORD PTR Y ;X和Y的低四位相减(不考虑借位) SBB DX,WORD PTR Y+2 ;X和Y的高四位相减(考虑借位) ADD AX,24 ADC DX,0 ;只是将进位加入到DX中 IDIV Z MOV A,AX ;存放商到A MOV B,DX ;存放余数到B MOV AX,4C00H INT 21H CODE ENDS END START 2 、试将字节数据B1 拆分成两个半字节数据,分别存放于其后两个单元X 和Y 中。 编程提示: 数据段定义应包含B1、X、Y 三个变量,其中B1 变量自定义具体的数值,X、Y 变量的数值由程序赋值,分别是B1 的高低半个字节。该程序中需要使用逻辑操作完成半字节数据的拆分。 DATA SEGMENT B1 DB 12H X DB ? Y DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX

汇编语言上机实验一2015李中

实验报告 课程:汇编语言程序设计 专业班级:计算机科学与技术 学号: 姓名:李中 实验一、熟悉汇编语言上机环境 一、实验目的 熟悉在微机上建立、汇编、链接、调试和运行汇编语言程序的全过程 二、实验要求 1、学会使用EDIT建立汇编语言源程序文件 2、学会使用MASM将汇编语言源程序编译为目标程序的方法 3、学会使用LINK将目标程序链接为可执行程序的方法; 4、学会在DOS环境下和在DEBUG中运行程序 三、实验内容 1、编辑、汇编、链接执行下列程序。观察程序的执行结果。该程序的功能是将字符串 “HELLO WORLD”在屏幕上显示出来、 参考程序如下: DSEG SEGMENT DATA DB "HELLO WORLD!$"

DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA DX,DATA MOV AH,09H INT 21H MOV AH,4CH INT 21H CSEG ENDS END START 编辑: 汇编:

链接:

测试: 2、编辑、汇编、链接、执行下列程序。观察程序的执行结果。该程序的功能是:计算 放在DATA1和DATA2单元中的两个数据之和,结果在屏幕上显示出来。 参考程序如下: DSEG SEGMENT DATA1 DB 35H DATA2 DB 29H DSEG ENDS

CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV AL,DATA1 MOV AL,DATA2 PUSH AX MOV CL,4 SHR AL,CL ADD AL,30H CMP AL,39H JBE OK1 ADD AL,07H OK1: MOV DL,AL MOV AH,02H INT 21H POP AX AND AL,0FH ADD AL,30H CMP AL,39H JBE OK2 ADD AL,07H OK2: MOV DL,AL MOV AH,02H INT 21H MOV AH,4CH INT 21H CSEG ENDS END START 编辑:

汇编语言程序设计实验指导

实验一汇编语言上机过程 一、上机前的软件准备: MS-DOS操作系统(如:MSDOS6.22 , MSDOS7.0 等) 文本编辑器(如:https://www.360docs.net/doc/cb10776007.html, , TURBO.EXE , TC.EXE , C.EXE 等) 汇编程序(如:MASM.EXE , ASM.EXE,TASM.EXE 等) 连接程序(如:LINK.EXE 等) 调试程序(如:DEBUG.EXE 等) 二、汇编程序建立过程: 通过 a.建立汇编源程序────→ b.编译为目标文件──┬─→d.连接为可执行文件 ↑↓ ↓ │ c.不通过,重新修改(语句错误)││ ├──────────────────────┘│ ↑ f.不正确,用调试工具调试,重新修改(逻辑错误)↓ └────────────────────────────←e运行 ↓正确 g.完成 三、现在对(二)的每一个标有字母的过程(PROCEDURE)进行详细说明 PROCEDURE a:建立汇编源程序(即:建立文件名.asm) 这个过程就相当于我们在纸上编写源程序代码一样,只不过是将纸变为了计算机,这个过程也称源代码录入。将源程序代码录入计算机的方法很多,下面将介绍具体方法。 1.通过MD-DOS自带的EDIT.EXE文本编辑器进行输入,在DOS提示符下键入:EDIT回车,这时如果你系统内可调用时,EDIT的操作画面便会出现在屏幕上,你就可在提示下进行录入了,当录入完毕后,选择存盘并给你输入的文件起一个文件名,形式:filename.asm ;(其中filename为你起的文件名,由1-8个字符组成),asm 是为汇编程序识别而必须加上去的,不可更改。存盘后在DOS下可用DOS命令DIR来查看,如果看到了所存的文件存在,就可以进行进程b。 2.如果你的系统中没有EDIT,也可用你所熟悉的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。 PROCEDURE b:编译目标文件(即:编译为.obj .lst .crf文件) 这个过程计算机将把你编的正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。如果此时你的程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,你可根据提示去逐一修改。现介绍具体过程: 在DOS提示符下键入MASM filename回车 (注:你系统内的汇编程序为MASM.EXE,如果你系统的汇编程序为ASM.EXE时,便将命令变为ASM fi lename回车。其中filename为你刚才在PROCEDURE a 中建立的文件名) 这时汇编程序的输出文件可以有三个(分别:.obj .lst .crf),便会出现三次提问,在这可以一路回车即可。下面显示的信息是源程序中的错误个数,如果为0则表示顺利通过,就可进行进程c。但如果不为0就说明有错误,并指出错误出现的行,可依据这个提示去进行修改。但如果错误太多还未等看清就显示过去了,可用如下命令形将错误信息存于一个你指定的文件,再用文本编辑器去查看。MASM filename >filen (f ilen为你起的一个没用过的文件名,用以存放出错信息)以后可查看filen来得到出错信息。

汇编语言第四次上机实验报告

汇编语言第四次上机实验报告 时间: 2013/5/10 7:00-9:30 地点:南一楼803 实验人员:计科10班王涛学号: U201114445 一、题目 1、用三种方式获取中断类型码10H对应的中断处理程序的入口地址。 (1)直接运行调试工具(TD.EXE),观察中断矢量表中的信息,指出中断类型码10H 对应的中断处理程序的入口地址。(使用TD观看即可)。使用TD观看时,在调试工具下调入以前编好的运行程序,跟踪执行INT 21H(即进入中断处理程序,方法是:执行到INT 21H 时,按ALT+F7),观察CS及IP是否改变成了前面记录的值。 (2)编写程序,用DOS系统功能调用方式获取,观察相应的出口参数与(1)看到的结果是否相同(使用TD观看即可)。 (3)编写程序,直接读取相应内存单元,观察读到的数据与(1)看到的结果是否相同. 2、编制时钟显示程序。要求每隔1s在屏幕右下角显示“年-月-日时:分:秒”,并将程序驻留在内存。 3、安装MASM32软件包,以其中的一个例子(如example\3dframes)为例,试用软件包中的集成汇编、连接和调试(TD32.EXE)功能。软件包从汇编教学网站上下载,操作参见《80X86汇编语言程序设计上机指南》第七章。 二、实验要求 1. 在调试工具下调入之前编好的运行程序,跟踪执行INT 21H(即进入中断处理程序,方法是:执行到INT 21H时,按ALT+F7),观察CS及IP是否改变成了前面记录的值。 操作提示:由于INT 21H内部的代码较长,为便于从中断处理程序返回到主程序,可在主程序INT 21H后面的指令上先设置好断点,当不再想跟踪中断处理程序时按F9即可。 实验报告的3、4、5 三个部分不用写。 2. 提示:CMOS内部07,08,09单元中分别存放着日、月、年的信息,“年”只显示低2位即可。汇编教学网站(http://202.114.1.86)上有CMOS参考资料。程序可参见教材6.2节的例1和例2。实验报告要完整。 3.在TD32中注意观察调用WIN API函数的指令序列特点,注意感受WINDOWS消息机制,掌握WINDOWS窗口程序的基本调试方法。 实验报告的3、4、5 三个部分不用写。 三、寄存器分配和变量定义说明 题目一:(1)略 (2)系统功能调用35H,入口参数为AL=10H,取中断信息。 (3)直接把主存中的DS:[40H]→IP,DS:[42H]→CS赋值给寄存器BX和CX 题目二:略 题目三:略

相关文档
最新文档