汇编语言实验三

汇编语言实验三
汇编语言实验三

课程实验报告

课程名称:汇编语言程序设计

实验名称:实验三模块化程序设计

实验时间: 2015-5-12,14:30-17:30

实验地点:南一楼804室15号实验台

指导教师:曹忠升

专业班级:

学号:

姓名:李肇宁

同组学生:无

报告日期:2015年6月8日

计算机科学与技术学院

一、原创性声明

本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。

特此声明!

学生签字:

日期:2015.6.3

二、评语与成绩评定

1.指导老师评语

2.实验成绩评定

指导教师签字:

日期:

目录

1 实验目的与要求 (1)

2 实验内容 (1)

3 实验过程 (2)

3.1 任务1 (2)

3.1.1 设计思想及存储单元分配 (2)

3.1.2 流程图 (2)

3.1.3 源程序 (4)

3.1.4 实验步骤 (10)

3.1.5实验记录 (10)

3.任务2 (13)

3.2.1 设计思想及存储单元分配 (13)

3.2.2 源程序 (13)

3.2.3 实验步骤 (18)

4 体会 (19)

1实验目的与要求

(1) 进一步掌握程序设计方法,包括宏指令、模块化程序设计方法;

(2) 掌握较大规模程序的调试方法。

2实验内容

任务1:

输入一组有符号字数据。对该组数进行排序,按照从大到小的顺序以用户指定的进制形式输出排序后的结果。

运行时:

Please input numbers:

123 0 -100 -50 +300 25 ↙

Output Format (1: decimal; 2 :hex; 3: Octal) : 1↙

300, 123, 25, 0, -50, -100

运行时:

Please input numbers:

123 0 -100 -50 300 25 ↙

Output Format (1: decimal; 2 :hex; 3: Octal ) : 2↙

12CH, 7BH, 19H, -32H, -64H

要求:

(1) 画出程序流程图,给出寄存器、存储单元的分配方法,子程序的功能、入口参数及出口参数(对于各个子程序,也要说明其寄存器、存储单元的分配情况。在流程图中也列出相应子程序的名称)。

(2) “数字串到字数据的转换”用子程序实现。要求:该子程序只实现一个数字串的转换。对于多个数字串,要多次调用该子程序。(可以借鉴教材中的示例,注意每个模块前都应该加上“.386”)。对于非数字串,以及超过一个字大小的数字串应给出提示。

(3) “排序”使用子程序实现。

(4) “数值数据到串的转换”用子程序实现。要求该子程序只实现一个数值数据的转换。

(5) 输入时,数字串之间的分割符可以是一个空格,也可以是一个标点符号(如逗号),数字串前可有一个正号或负号。输出时,数字串之间的分割符号为一个逗号加上一个空格。

(6) 观察执行CALL指令时,堆栈的变化,以及IP、CS的变化。

(7) 掌握跟踪进入子程序的方法。

(8) 定义宏并使用宏指令,观察宏扩展后的结果。

(9) 采用模块化程序的方法设计该程序。

说明:

(1) 写下必要的设计文档可以帮助我们理清思路,减少写程序时的错误;

(2) 同学们可以相互讨论算法思想,理清思路;

(3) 可以先不用子程序来实现程序的功能,然后再改写成子程序,最后拆分到不同模块;

(4) 在源程序中加上适当的注释。

任务2:

(1) 将上述程序改成简化段定义,并用第6章提到的INVOKE调用子程序。给出要做怎样的调整,给出改写后的源程序。设计思想及存储单元分配、流程图部分可简单写或省略。

(2) 观察各个模块中定义的段在内存中相互之间的关系,包括定义的段满足合并条件(即相同段名、类别、加了PUBLIC属性)的情况和不满足合并条件时的情况,以及简化段时的情况。

3实验过程

3.1任务1

3.1.1设计思想及存储单元分配

设计思想:

1.采用1号DOS功能调用输入一个字符,送入BUF字节缓冲区;

2.再调用F10T2子模块将BUF区中这个十进制数字串转换为二进制,送入ARR字存储区;

3.再调用F2TN和QUEUE将ARR缓冲区中所有符号数排序并按指定进制输出

存储单元分配:

AX——中间寄存器。

BX——往ARR字存储区送数指针,初值为ARR。

CX——作以逗号分隔的一个十进制数字串长度计数器,初值为0。

DX——按系统功能调用的规定使用。

DI——往BUF字节存储区送输入的字符指针,初值为BUF。

SI——调用F10T2子模块的入口参数,作从BUF区取字符指针。

BUF——输入缓冲区首址。

ARR——经转换得到的二进制数组存储区首址。

COUNT——ARR存储区中数组元素个数计数器,初值为0。

SIGN——输入字符串处理结束标志,1—处理结束,0—处理未结束

3.1.3 源程序

主模块程序:

NAME MAIN

EXTRN F10T2:NEAR,F2TN:NEAR,QUEUE:NEAR

IF1 ;将宏库在第一次扫描时加入一起汇编INCLUDE MACRO.LIB

ENDIF

.386

DA TA SEGMENT USE16 PARA PUBLIC'DATA'

BUF DB 8 DUP(0) ;输入的一个十进制数字串存储区

ARR DB 32 DUP(0) ;转换后的二进制数组存储区

SIGN DB 0 ;是否输完标志,1已输完,0未输完

COUNT DW 0 ;转换后的二进制数组元素个数计数器

ERROR DB 'IS ILLEGGAL DIGIT!$'

OUTPUT1 DB 'PLEASE INPUT YOUR NUMBER SEPARATED BY SPACE:$' OUTPUT2 DB 'OUTPUT FPEMAT(1:DECIMAL;2:HEX;3: OCTAL):$'

DA TA ENDS

STACK0 <200 DUP(0)>;调用宏指令定义堆栈

CODE SEGMENT USE16 PARA PUBLIC'CODE'

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

START:MOV AX,DATA

MOV DS,AX

MOV ES,AX

LEA BX,ARR ;数组首址ARR->BX

MOV COUNT,0 ;数组元素个数计数器COUNT

MOV SIGN,0

WRITE OUTPUT1

BEG: LEA DI,BUF ;数组串存储区首址

MOV CX,0

NEXT0:MOV AH,1

INT 21H

CMP AL,' ' ;判断输入字符是否是空格

JE DIGIT ;是,代表一个数输完

CMP AL,0DH ;判断输入字符是否是回车符

JNE P

CMP COUNT,0

JE EXIT

INC SIGN

JMP DIGIT

P:STOSB

INC CX

JMP NEXT0

DIGIT:LEA SI,BUF

MOV DX,16

CALL F10T2 ;调用F10T2子模块

CMP SI,-1

JE ERR ;如为非法数则转输出错误处理

MOV [BX],AX

ADD BX,2

INC COUNT ;计数器加1

CMP SIGN,1 ;是否全部输完

JE END0

JMP BEG ;是,转排序

END0: MOV CX,COUNT

LEA SI,ARR

MOV BP,1

CALL QUEUE ;调用子模块QUEUE对有符号数排序

CRLF

WRITE OUTPUT2

MOV AH,1

INT 21H ;1号调用

SUB AL,'1'

XOR AH,AH ;0->AH

MOV CX,AX

CRLF

MOV BX,COUNT

LEA SI,ARR

OUT2: MOV AX,[SI]

ADD SI,2

MOV DX,16

CALL F2TN ;调用F2TN子模块将AX中的数按N进制输出OUT1 ' '

DEC BX

JNE OUT2

JMP EXIT

ERR:CRLF

WRITE ERROR

EXIT: MOV AH,4CH

INT 21H

CODE ENDS

END START

十进制->二进制子模块F10T2程序:

NAME F10T2

;功能:将十进制ASCII码转换成有符号的二进制数AX/EAX,可转换的16位数范围是-32767~+32767

;入口参数:

;SI——指向待转换的十进制ASCII码存储区首址

;CX——存放该十进制ASCII码串的长度

;出口参数:

;BX——中间寄存器

;SIGN——正负数标记

PUBLIC F10T2

.386

DA TA SEGMENT USE16 PARA PUBLIC 'DATA'

SIGN DB ?

DA TA ENDS

CODE SEGMENT USE16 PARA PUBLIC 'CODE'

ASSUME CS:CODE,DS:DATA

F10T2 PROC FAR

PUSH EBX

MOV EAX,0

MOV SIGN,0

MOV BL,[SI]

CMP BL,'+'

JE F10

CMP BL,'-'

JNE NEXT2

MOV SIGN,1

F10:DEC CX

JZ ERR

NEXT1:INC SI

MOV BL,[SI]

NEXT2:CMP BL,'0'

JB ERR

CMP BL,'9'

JA ERR

SUB BL,30H

MOVZX EBX,BL

IMUL EAX,10

JO ERR

ADD EAX,EBX

JO ERR

JS ERR

JC ERR

DEC CX

JNZ NEXT1

CMP DX,16

JNE PP0

CMP EAX,7FFFH

JA ERR

PP0:CMP SIGN,1

JNZ QQ

NEG EAX

QQ:POP EBX

RET

ERR:MOV SI,-1

JMP QQ

F10T2 ENDP

CODE ENDS

END

二进制->n进制子模块F2TN程序:

NAME F2TN

;功能:将AX/EAX中有符号二进制数换成N进制数,N有用户指定;入口参数:

;AX/EAX——存放待转换二进制数

;CX——存放用户要求的进制数的序号

;出口参数:

;BUF——存放转换后的N进制ASC码数字串的字节缓冲区

;FROMAT——存放对用户输入要求转换的进制数

;EAX——存放待转换的二进制数

;EBX——存放要转换的进制数

;SI——存放待转换的N进制数ASCII码数字串的字节缓冲区首址;DI——存放各种进制数内容区的首址

;CX——N进制数计数器(在RADIX子程序中使用)

;EDX——按除法指令和系统功能调用的规定使用

PUBLIC F2TN

.386

DA TA SEGMENT USE16 PARA PUBLIC 'DATA' BUF DB 12 DUP(?)

FORMAT DB 10,16,8

DA TA ENDS

CODE SEGMENT USE16 PARA PUBLIC 'CODE' ASSUME CS:CODE,DS:DA TA

F2TN PROC FAR

PUSH EBX

PUSH SI

PUSH DI

LEA SI,BUF

MOVSX EAX,AX

JNZ PLUS

NEG EAX

MOV BYTE PTR [SI],'-'

INC SI

PLUS:LEA DI,OFFSET FORMA T

ADD DI,CX

MOV BL,[DI]

MOVZX EBX,BL

CALL RADIX ;调用RADIX

MOV BYTE PTR [SI],'$'

LEA DX,BUF

MOV AH,9

INT 21H

POP SI

POP DI

POP EBX

RET

F2TN ENDP

RADIX PROC

PUSH CX

PUSH EDX

XOR CX,CX

LOP1:XOR EDX,EDX

DIV EBX

PUSH DX

INC CX

OR EAX,EAX

JNZ LOP1

LOP2:POP AX

CMP AL,10

JB L1

ADD AL,7

L1: ADD AL,30H

MOV [SI],AL

INC SI

LOOP LOP2

POP EDX

POP CX

RET

RADIX ENDP

CODE ENDS

END

排序子模块QUEUE程序:

NAME QUEUE

功能:将一组16位的有或无符号二进制数按从大到小顺序排列后存储在原来的区域,用冒泡排序

;入口参数:

;SI——从数组存储区取数指针,初值为该存储区首址

;CX——待排序的数组元素个数

;BP——有无符号排序的标识(BP=1为有符号数排序)

;所用寄存器:

;DI——中间寄存器

;AX——存放待比较数

;DX——内循环计数器,CX为外循环计数器

PUBLIC QUEUE

.386

STACK SEGMENT USE16 PARA STACK 'STACK'

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT USE16 PARA PUBLIC 'CODE'

ASSUME CS:CODE,SS:STACK

QUEUE PROC

PUSH AX

PUSH DX

PUSH DI

MOV DI,SI

DEC CX

QU1:MOV DX,CX

MOV SI,DI

QU2:MOV AX,[SI]

CMP BP,0

JE NO

CMP AX,[SI+2]

JG NOXCH ;大于则跳至不交换

XCH:XCHG [SI+2],AX

MOV [SI],AX

NOXCH:ADD SI,2

DEC DX

JNE QU2

LOOP QU1

POP DI

POP DX

POP AX

RET

NO:CMP AX,[SI+2]

JBE NOXCH

JMP XCH

QUEUE ENDP

CODE ENDS

END

3.1.4 实验步骤

1. 使用编辑程序EDIT.EXE分别录入各模块源程序,主程序模块存盘文件名为DEMO.ASM,F10T

2.ASM,F2TN.ASM,QUEUE.ASM。

2. 使用MASM5.0或6.0汇编源文件。(即MASM DEMO)

3. 观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。

4. 使用连接程序LINK.EXE将汇编生成的各模块文件连接成执行文件。(即LINK DEMO+F2TN+F10T2+QUEUE)

5. 若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成DEMO.EXE文件。

6. 执行该程序。即在命令行提示符后输入DEMO后回车,观察执行现象。

3.1.5实验记录

1.实验环境条件:P3 1GHz,256M内存;WINDOWS 2000命令行窗口;如下汇编并link主程序模块demo,子模块F10T2,F2TN,QUEUE。

2.link各模块:

3.执行task1.exe,输入要排序的数,观察结果:

3.任务2

3.2.1 设计思想及存储单元分配

设计思想:将任务1中程序改成简化段定义,使用INVOKE调用子程序,修改后源程序如下

3.2.2 源程序

修改后的主模块程序:

NAME MAIN

EXTRN F10T2:NEAR,F2TN:NEAR,QUEUE:NEAR

IF1 ;将宏库在第一次扫描时加入一起汇编

INCLUDE MACRO.LIB

ENDIF

.386

.DATA SEGMENT USE16 PARA PUBLIC'DATA'

BUF DB 8 DUP(0) ;输入的一个十进制数字串存储区

ARR DB 32 DUP(0) ;转换后的二进制数组存储区

SIGN DB 0 ;是否输完标志,1已输完,0未输完

COUNT DW 0 ;转换后的二进制数组元素个数计数器

ERROR DB 'IS ILLEGGAL DIGIT!$'

OUTPUT1 DB 'PLEASE INPUT YOUR NUMBER SEPARATED BY SPACE:$'

OUTPUT2 DB 'OUTPUT FPEMAT(1:DECIMAL;2:HEX;3: OCTAL):$'

STACK0 <200 DUP(0)>;调用宏指令定义堆栈

.CODE SEGMENT USE16 PARA PUBLIC'CODE'

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

.STARTTUP:MOV AX,@DATA

MOV DS,AX

MOV ES,AX

LEA BX,ARR ;数组首址ARR->BX

MOV COUNT,0 ;数组元素个数计数器COUNT

MOV SIGN,0

WRITE OUTPUT1

BEG: LEA DI,BUF ;数组串存储区首址

MOV CX,0

NEXT0:MOV AH,1

INT 21H

CMP AL,' ' ;判断输入字符是否是空格

JE DIGIT ;是,代表一个数输完

CMP AL,0DH ;判断输入字符是否是回车符

JNE P

CMP COUNT,0

JE EXIT

INC SIGN

JMP DIGIT

P:STOSB

INC CX

JMP NEXT0

DIGIT:LEA SI,BUF

MOV DX,16

INVOKE F10T2,EAX,BL,EBX ;调用F10T2子模块

CMP SI,-1

JE ERR ;如为非法数则转输出错误处理

MOV [BX],AX

ADD BX,2

INC COUNT ;计数器加1

CMP SIGN,1 ;是否全部输完

JE END0

JMP BEG ;是,转排序

END0: MOV CX,COUNT

LEA SI,ARR

MOV BP,1

CALL QUEUE,SI,DI,AX ;调用子模块QUEUE对有符号数排序

CRLF

WRITE OUTPUT2

MOV AH,1

INT 21H ;1号调用

SUB AL,'1'

XOR AH,AH ;0->AH

MOV CX,AX

CRLF

MOV BX,COUNT

LEA SI,ARR

OUT2: MOV AX,[SI]

ADD SI,2

MOV DX,16

INVOKE F2TN,EAX,BL,EBX ;调用F2TN子模块将AX中的数按N进制输出

OUT1 ' '

DEC BX

JNE OUT2

JMP EXIT

ERR:CRLF

WRITE ERROR

EXIT: MOV AH,4CH

INT 21H

修改后的F10T2模块程序:

NAME F10T2

;功能:将十进制ASCII码转换成有符号的二进制数AX/EAX,可转换的16位数范围是-32767~+32767

;入口参数:

;SI——指向待转换的十进制ASCII码存储区首址

;CX——存放该十进制ASCII码串的长度

;出口参数:

;BX——中间寄存器

;SIGN——正负数标记

PUBLIC F10T2

.386

.DATA SEGMENT USE16 PARA PUBLIC 'DATA'

SIGN DB ?

.CODE SEGMENT USE16 PARA PUBLIC 'CODE'

计算机组成原理实验1-汇编语言实验

微处理器与接口技术 实验指导

实验一监控程序与汇编语言程序设计实验 一、实验要求 1、实验之前认真预习,明确实验的目的和具体实验内容,设计好主要的待实验的程序,做好实验之前的必要准备。 2、想好实验的操作步骤,明确通过实验到底可以学习哪些知识,想一想怎么样有意识地提高教学实验的真正效果。 3、在教学实验过程中,要爱护教学实验设备,认真记录和仔细分析遇到的现象与问题,找出解决问题的办法,有意识地提高自己创新思维能力。 4、实验之后认真写出实验报告,重点在于预习时准备的内容,实验数据,实验过程、遇到的现象和解决问题的办法,自己的收获体会,对改进教学实验安排的建议等。善于总结和发现问题,写好实验报告是培养实际工作能力非常重要的一个环节,应给以足够的重视。 二、实验目的 【1】学习和了解TEC-XP16教学实验系统监控命令的用法; 【2】学习和了解TEC-XP16教学实验系统的指令系统;

【3】学习简单的TEC-XP16教学实验系统汇编程序设计。 三、实验注意事项 (一)实验箱检查 【1】连接电源线和通讯线前TEC-XP16实验系统的电源开关一定要处于断开状态,否则可能会对TEC-XP16实验系统上的芯片和PC机的串口造成损害。 【2】五位控制开关的功能示意图如下: 【3】几种常用的工作方式【开关拨到上方表示为1,拨到下方为0】 (二)软件操作注意事项 【1】用户在选择串口时,选定的是PC机的串口1或串口2,而不是TEC-XP16实验系统上的串口。即选定的是用户实验时通讯线接的PC机的端口; 【2】如果在运行到第五步时没有出现应该出现的界面,用户需要检查是不是打开了两个软件界面,若是,关掉其中一个再试; 【3】有时若TEC-XP16实验系统不通讯,也可以重新启动软件或是重新启动PC再试; 【4】在打开该应用软件时,其它的同样会用到该串口的应用软件要先关掉。

汇编语言程序设计实验报告

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

汇编语言实验

汇编语言程序设计 实验一DEBUG 程序使用技巧 学号:姓名: 1.寄存器和内存 开始Debug 程序。输入“Q ” 退出程序。再次启动Debug。 输入“r ”来显示CPU的当前状态和寄存器中的当前内容。 输入“r AX ”和“1234”,_______寄存器中的内容变为1234。 输入“r DS ”和“2000”,_______寄存器中的内容变为2000。 输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里: 输入“f DS:1000 1100 77 ”再显示一次这80H 字节。判断这条指令的作用是什么? 再输入“d 2000:1000 ”来显示数据段中80H 字节数据。观察与前面的数据有无不同。 输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。比较其中2000:0000 段中的数据。相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。

2.输入机器码,使用单步和断点 退出Debug,再重新启动Debug。 输入“r ”观察CPU 的状态,下一条指令是什么? 使用两种方式输入一段程序,第一种方式:直接输入机器码。 输入“u ”来显示程序段中的指令序列。然后输入“d CS:100 ” 来显示代码段中的数据。观察显示内容。 “u CS:100 106 ”做反汇编,就是显示出汇编语句。将这几句汇编语句记录下来: 使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。注意,跟踪程序前,要让IP 寄存器中的值是100H。一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。

汇编语言实验2

计算机工程系实验报告 课程名称:汇编语言 实验项目名称:用机器指令和汇编语言指令编程 班级:15级计科4班姓名:梁红梅学号:15091413 一、实验目的: 1.学习Debug中D命令的使用方法,掌握查看指定内存单元的内容的指令,其中本实验中 主要掌握“d段地址:偏移地址”的格式; 2.了解Debug 中D命令程序的执行者:CPU,了解D命令的执行过程; 3.掌握CPU在访问内存单元时的主要过程; 4.学习怎样利用在Debug中cs、ds、ss、es这4个段寄存器,简化debug命令格式。 二、实验要求: 使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。Mov ax,ffff Mov ds,ax Mov ax,2200 Mov ss,ax Mov sp,0100 Mov ax,[0] ;ax= Add ax,[2] ;ax= Mov bx,[4] ;bx= Add bx,[6] ;bx= Push ax ;sp= 修改的内存单元的地址是内容为 Push bx ;sp= 修改的内存单元的地址是内容为 Pop ax ;sp= ;ax= Pop bx ;sp= ;ax= Push [4] ;sp= 修改的内存单元的地址是内容为 Push [6] ;sp= 修改的内存单元的地址是内容为

三、实验数据记录: 1.进入Debug后使用-a命令将程序写入内存 2.通过使用-t命令将写入内存的程序逐一执行,直到命令执行完毕

三、实验结果及分析: 1.mov ax,[0] 执行完成后 ax=C0EA; 2.add ax,[2]执行完成后ax=C0FC; 3.mov bx,[4] 执行完成后 bx=30F0; 4.add bx,[6]执行完成后 bx=6021; 5.push ax 执行完成后 sp= 00FE 修改的内存单元的地址是 2200:00FE 内容为C0FC 6.push bx 执行完成后 sp= 00FC 修改的内存单元的地址是 2200:00FC 内容为6021

汇编语言实验报告——累加

《汇编语言》实验报告 ——累加器制作 2014级计算机科学与工程学院 学号: 姓名 一、实验要求: 1.显示 INPUT N :,提示用户输入数字字串 2.检测输入字串的合法性,非法给出提示 3.将输入数字字串转化为数值,存入变量n 4.累加1~n ,存入变量sum 5.以十进制显示sum 二、流程图: 开始 输入 判断是否为回车 判断是否为数字 是 转化为数值,将堆栈中 的高位数字乘10然后与低位数字相加,放入堆 栈 否 显示“error ” 结束 否 是 判断cx=0 否 将CX加到A X中 是 得出sum的值 将结果除以10并将余数存入堆栈,累计位数cx,直至商为0 将堆栈中的数字依次输出显示,直至cx=0

三、源代码: DATAS SEGMENT str1 db "Input N:","$" str2 db "sum=","$" str3 db 0ah,"error","$" n dw 0 sum dw 0 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA dx,str1;输出提示符 mov ah,9 int 21h input: mov ah,01;输入数字 int 21h cmp al,0dh;判断是否为回车 jz step1 cmp al,"0";判断字符合法性 jb error cmp al,"9" ja error sub al,"0";转化为ASCII码 mov ah,0;此段将高位乘10 push ax mov ax,n shl ax,1 push ax mov cl,2 shl ax,cl

汇编语言实验一

淮阴工学院 汇编语言程序设计实验报告 选题名称:实验一调试工具的使用方法训练 系(院):计算机工程学院 专业:计算机科学与技术 班级: 1101 姓名:康志杰学号: 1101301132 指导教师:王福德 学年学期:2013 学年第 2 学期 2013 年 4 月15 日

实验一利用DEBUG调试程序调试程序段 <1 > 实验目的: (1)熟悉DEBUG有关命令的使用方法 (2)利用DEBUG掌握有关指令的功能 (3)利用DEBUG运行简单的程序段 <2 > 实验内容 (1)进入和退出DEBUG程序 1)开始——运行,输入cmd,点确定或回车键进入DOS环境 2)在命令窗口输入debug进入debug程序 3)进入debug程序后,按q退出

(2) 学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命 令、N命令、W命令等,也应试一下。 1 显示存储器单元命令D 格式:D [<地址范围>] 功能:显示指定地址范围内的存储区数据,包括十六进制数据形式及其对应的ASCII码字符显示。 2 写存储器单元命令E 格式:E <地址> [<字符串>] 功能:逐个修改指定单元内容或将字节串写入指定的一组连续单元。 例:将字节串′computer′写入以100H为起始地址的存储器区。 -E 100′computer′ 3显示和修改某个指定寄存器内容, 格式为:-R 寄存器名 例如打入:-R AX 系统将响应如下: AX 0000

: 表示AX当前内容为0000,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如: -R BX BX 0000 :1000 则BX内容由0000改为1000 4显示和修改标志位状态, 命令格式为:-RF 系统将给出响应,如 NV UP EI PL NZ NA PO NC- 这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如 NV UP EI PL NZ NA PO NC-ZR CY

汇编语言实验

实验四屏幕字符显示程序 实验目的: 通过实验掌握下列知识: 1、8088指令: JMP,ROR,XOR,HLT。 2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。 3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。 4、IBM-PC机的ASCII码表及控制字符。 5、命令(。COM)文件及使用方法。 6、利用^Break退出程序的方法及局限性。 实验内容及步骤: 一、利用INT 21 0AH号功能调用显示字符串。 1、用A命令在100H处键入下列程序: MOV AH, 9 MOV DX,110 INT 21 INT 20 2、用A命令在110H处键入下列字符串的ASCII码: DB 'This is a sample!$' 3、用N命令和W命令将此程序(包括数据区)存入文件名为AA。COM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。 4、用Q命令退出DEBUG。 5、在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。

二、利用INT 21H 2号功能显示字符: 1、用A命令在100H处键入下列程序: XOR DL,DL MOVCX,100 LOP:MOV AH,2 INT 21 INC DL PUSH CX MOV CX,8 DELY: PUSH CX MOV CX,0 J: LOOP J POP CX LOOP DELY POP CX LOOP LOP INT 20 2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同? 3、按CTRL+BREAK退出此程序,若一次不行可多做几次。

实验4汇编实验

数学与软件科学学院实验报告 学期:2017至 2018第 2 学期 2018年4月4日课程名称: 汇编语言专业:信息与计算科学班级: 2015级_5班实验编号:4实验项目:编写、调试具有多个段的程序 指导教师:冉茂华 姓名:黄玉含学号:2015060512实验成绩: 1、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。assume cs: code, ds:data, ss:stack data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax,data mov ds,ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax,4c00h int 21h code ends end start 执行结果如下:

○1说明了cs=___076c_____,ss=____076b______,ds=_______076a_________ (1)、CPU执行程序,程序返回前,data段中的数据是多少? 还未执行时的数据:

执行程序后的数据: ○2不变,因为程序加载进去段内容就已经固定。 (2)、CPU执行程序,程序返回前,cs=___076c_____,ss=____076b______,ds=_______076a_________。 (3)、设程序加载后,code段的段地址为X,则data段的段地址为___X-2_____,stack段的段地址为____x-1______。 分析:程序段的段地址总是16的倍数且程序在内存中顺序加载。

汇编程序调试实验报告

微机原理与接口技术 作 业 班级: 目录 一、........................................................... 实验目的:2 二、............................................................. 实验环境2 三、............................................................. 实验过程3 (一)................................................. 基础知识储备3

(二)............................................. 汇编语言程序设计3

(三)汇编程序调试 (3) 四、............................................................. 调试实例4 (一)....................................................... 实例一4 (二)....................................................... 实例二6 (三)....................................................... 实例三9 (四)....................................................... 实例四12五、............................................................. 实验总结15 (一)..................................................... 实验收获15 (二)..................................................... 实验感悟16 一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标 代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MAS汇编语言及其程序设计方法。 、实验环境 EDIT编辑器、MASME编程序、LINK连接程序、TD调试程序

汇编语言实验四

福建农林大学金山学院实验报告 系:信息与机电工程系专业:计算机科学与技术年级: 08 姓名:游品尧学号: 082231044 实验课程:汇编语言 实验室号:___ _605 实验设备号: F5 实验时间:11.22 指导教师签字:成绩: 实验四 DOS功能调用 1.实验目的和要求 1.学会DOS中关于显示功能调用指令的用法。 2.领会修改显存方法显示字符。 2.实验环境 实验的硬件环境是: IBM—PC机及其兼容机 实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:https://www.360docs.net/doc/6c4087319.html,;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。 3.实验内容及实验数据记录 1、输入一个字符,显示出来 2、输入一个字符串,显示出来 3、buf开始的3个的16位二进制数用十六进制数的形式显示出来, (1)理解程序 (2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。 (3)如果要分行显示,程序要如何修改? DATA SEGMENT BUF DW 4F59H, 56A8H, 0FF90H DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DA TA START: MOV AX, DA TA MOV DS, AX

MOV SI, 0 P: MOV BX, BUF[SI] MOV CH, 4 L: MOV CL, 4 ROL BX, CL MOV DL, BL AND DL, 0FH CMP DL, 10 JB NEXT ADD DL, 7 NEXT: ADD DL, 30H MOV AH, 2 INT 21H DEC CH JNZ L INC SI INC SI CMP SI, 4 JNA P MOV AH, 4CH INT 21H CODE ENDS END START 4、运行下列程序,在屏幕的第1行,会显示一个字符X,理解程序段STACK SEGMENT DB 128 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK START: MOV AX,STACK MOV SS,AX MOV SP,128 MOV AX,0B800H

汇编语言实验(1)

课程名称汇编语言与微机原理实验名称字符串显示实验 实验目的、要求 1.掌握汇编语言程序设计的编写链接调试运行的完整过程 2.掌握利用masm.exe、link.exe等进行汇编、连接的方法及执行目的程序的方法。 3.初步认识ASCII码 4.初步认识利用DOS系统功能调用显示字符与字符串的方法 5.认识汇编源程序结构(框架)。 实验原理 利用DOS的中断调用在屏幕上显示字符串”Hello World”。 主要设备 计算机一台汇编语言软件 实验步骤及原始数据记录 程序源代码 1.显示数据区中的字符串"Hello World" assume cs:code,ds:data,ss:stack stack segment stack dw 256 dup (0) stack ends data segment msg db 'Hello World!',0dh,0ah,$ data ends code segment start: mov ax,data mov ds,ax mov ah,09h mov dx,offset msg int 21h exit: mov ah,4ch int 21h code ends end start

四、操作步骤: 1.在C盘生成一个新文件夹,例如P1,在该文件夹中拷入masm.exe、link.exe、debug.exe等工具程序 2.打开记事本,将上面第1个程序复制生成纯文本文件,文件名以.asm为扩展名。例如:A1.ASM。(注意保存时要选择保存类型为“所有文件”)。 3.从“开始”→程序→附件→命令提示符,进入DOS命令界面。 4. 使用CD命令,进入新文件夹,例如:P1,命令为:CD C:\P1 5. 执行MASM <文件名>,对源程序进行编译。 6. 执行LINK.EXE <文件名>,连接生成执行程序。例如:LINK A1 7. 执行生成的程序,记录屏幕响应的情况。例如:A1 可以不带扩展名EXE。程序运行正常的话,应该要显示字符串"Hello World!"。 实验结果 程序运行之后,屏幕上显示字符串“Hello World”。 闲来无聊,想重新学习一下汇编,第一个helloworld,想起绝影的一句话"你们学高级语言,但是高级语言会变,我学低级语言,学了永远也不会变!" - -b stack segment stack ; 定义堆栈段 db 100 dup(?) ;堆栈段长100字节, 这里db就是字节的意思,如果是用dw就是字,100 dup(?) 中的dup是重复的意思,这句话是重复100遍,一遍定义一个字节,每个字节里全填0 stack ends ; 堆栈段结束 data segment ;数据段 szHello db 'hello,world',0dh,0ah,'$' ;定义szHello , 0dh,0ah分别是回车键,换行键的ASCII码, '$'是DOS功能调用INT 21H中9号功能要求的要显示字符串的结束标志,写成szHello db

实验一基础汇编语言程序设计

实验一基础汇编语言程序设计 实验目的 1.学习和了解TEC-XP十六位机监控命令的用法; 2.学习和了解TEC-XP十六位机的指令系统; 3.学习简单的TEC-XP十六位机汇编程序设计。 实验内容 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。 3.学习联机使用TEC-XP教学试验系统和仿真终端软件。 实验要求 在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。 实验步骤 1.关闭电源,将大板上的COMl口与PC机的串口相连; 2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可; 3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。其它实验相同; 4.按一下“RESET”按键,再按一下“START”’按键,主机上显示: 5.用R命令查看寄存器内容或修改寄存器的内容 1.用R命令查看寄存器或修改寄存器内容 1)在命令行提示符状态下输入: R↙;显示寄存器的内容 注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格, 也可有—个或数个空格 主机显示: 寄存器原值:xxxx 在后面输入新的值0036 再用R命令显示寄存器内容,则R0的内容变为0036。 2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙ 会显示从2000H地址开始的连续128个字的内容; 连续使用不带参数的D命令,起始地址会自动加128(即80H)。

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

汇编语言实验4-分支程序设计

汇编语言实验报告 Assembly Language Programming Lab Reports ______________________________________________________________________________ 班级: _________ 姓名:___________ 学号:___________ 实验日期:_____________ 学院: _____计算机与通信工程学院____ 专业:_______计算机科学与技术___________ 实验顺序:___实验四____ 实验名称:____________分支程序设计________________ 实验分数:_______ 考评日期:________ 指导教师: ______________________________________________________________________________ 一.实验目的 1.掌握主要的转移指令和位操作指令。 (1)无条件转移指令。Jmp理解掌握段内寻址和段间寻址方式。 (2)条件转移指令,无符号数比较转移,带符号数比较转移,cx为0转移指令(jcxz)这 些都为短转移指令,当代码过长超出-128-127的的转移范围,学会使用无条件指令 作为中间桥梁完成相应的功能。 (3)Test指令和Cmp指令。 2.掌握分支程序实现的方法。 (1)在完成一个程序的功能时,先简单列出要完成这个程序需要的步骤。 (2)根据列出的步骤画出程序框图。 (3)根据框图写代码。 3.在调试运行程序时,理解程序的加载过程。进一步掌握编辑、编译、链接、调试过程。 ______________________________________________________________________________ 二.实验环境 操作系统:windows xp 编译程序:masm 5.0 ______________________________________________________________________________ 三.实验原理 1.无条件转移指令 格式:JMP OPR 举例:JMP AA1 2.条件转移指令 格式:JZ、JNZ、JC、JNC 举例:JZ let1 3.逻辑与AND 格式:AND DST,SRC 举例:AND AL,0FH 4.循环左移,循环右移 格式:ROL、ROR 举例:ROL AX,1 ROR AL,1

汇编语言实验整理

1.设计程序。实现Y=2X+3,X是一位十进制数。要求X从键盘输入,在下一行 显示“Y=2X+3=”以及十进制计算结果。 data segment\x db?\y dw?\mess1db0ah,0dh,'input x:$'\mess2db 0ah,0dh,'Y=2X+3=$'\data ends\code segment\assume cs:code,ds:data\start:\mov ax,data\mov ds,ax\let3:\mov dx,offset mess1\mov ah,9\int21h\mov ah,1\int21h\cmp al,'0'\jb out1\ cmp al,'9'\ja out1\and al,0fh\mov bl,2\mul bl\add ax,3\mov y,ax\mov cx,0\mov bx,10\let0:\mov dx,0\inc cx\idiv bx\push dx\cmp ax,0\jne let0\mov dx,offset mess2\mov ah,9\int 21h\let1:\pop ax\add ax,0030h\mov dl,al\mov ah,2\int21h\ dec cx\cmp cx,0\jnz let1\jmp let3\out1:\mov ah,4ch\int21h\ code ends\end start 2.编写程序,将键盘输入的小写字母变为大写字母显示在屏幕上,输入小写字 母以外的其它字符则退出。 data segment\mess1db0ah,0dh,'xiaoxieinput:$'\mess2db 0ah,0dh,'daxieoutput:$'\data ends\code segment\assume cs:code,ds:data\start:\mov ax,data\mov ds,ax\let2:\mov dx,offset mess1\mov ah,9\int21h\mov ah,1\int21h\cmp al,'a'\jb out1\ cmp al,'z'\ja out1\mov bl,al\mov dx,offset mess2\mov ah,9\int 21h\let0:\sub bl,20h\mov dl,bl\mov ah,2\int21h\jmp let2\out1:\mov ah,4ch\int21h\code ends\end start 3.设计程序。实现Z=X/4+16*Y,X和Y都是一位十进制数。要求从键盘输入, 在下一行显示“Z=X/4+16*Y”以及十进制计算结果。 data segment\mess1db0ah,0dh,'input x:$'\mess2db0ah,0dh,'input y:$'\ mess3db0ah,0dh,'z=x/4+16*y=$'\data ends\code segment\assume cs:code,ds:data\start:\mov ax,data\mov ds,ax\let0:\mov dx,offset mess1\mov ah,9\int21h\mov ah,1\int21h\mov cl,2\sub al,30h\ mov ah,0\sar ax,cl\mov bl,al\mov dx,offset mess2\mov ah,9\int 21h\mov ah,1\int21h\sub al,30h\mov ah,0\mov cl,4\sal ax,cl\ add al,bl\mov bx,ax\mov dx,offset mess3\mov ah,9\int21h\let1:\ mov ax,bx\mov cx,0\mov bx,10\let2:\mov dx,0\inc cx\idiv bx\ push dx\cmp ax,0\jne let2\let3:\pop ax\add ax,0030h\mov dl,al\ mov ah,2\int21h\dec cx\cmp cx,0\jne let3\mov ah,4ch\int

汇编语言实验

循环与分支程序设计 实验目的 ⒈进一步熟悉掌握上机操作。 ⒉练习循环分支程序的编写方法。 3.掌握利用DEBUG修改参数、检查结果的方法。 实验内容: 1.设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数存放到s5、s6、s7、s8、s9及s10单元中。datarea segment grade dw 56,69,84,82,73,88,99,63,100,80 s5 dw 0 s6 dw 0 s7 dw 0 s8 dw 0 s9 dw 0 10 dw 0 datarea ends main proc far assume cs:prognam, ds:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov s5, 0 mov s6, 0 mov s7, 0 mov s8, 0 mov s9, 0 mov s10, 0 mov cx, 10 mov bx, offset grade compare: mov ax, [bx] cmp ax, 60 cmp ax, 70 cmp ax, 80 cmp ax, 90 cmp ax, 100 jmp short change-addr nine: inc s9 jmp short change-addr

eight: inc s8 jmp short change-addr seven: inc s7 jmp short change-addr six: inc s6 jmp short change-addr five: inc s5 change-addr: add bx, 2 loop compare ret main endp end start

微机原理实验四 汇编语言程序设计与调试

实验四 1 一.实验目的: 1.伪指令、宏指令的使用 2.汇编语言程序设计与调试 3.CodeView编译调试工具软件的使用 二.实验内容 1.(重做,用宏定义表格,不用xlat指令,)定义一数据段data,从10H开始存放y 函数值表,table为首指针( Y=X2-2X+3 ;X=3,4,5,6,7,8,9,10)。编一程序根据X值查table表,把对应Y值存入Y变量中。 mm macro data segment ORG 10 table db 6,11,18,27,38,51,66,83 x db 5 y db ? data ends ENDM code segment assume cs:code,ds:data start: MM mov ax,data mov ds,ax lea bx,table mov ah,0 mov al,x sub al,3 add bx,ax mov al,[bx] mov y,al mov ah,4ch

int 21h code ends end start 2.字节变量BCDC中定义了10个字节的压缩BCD码(20十进制数),编一程序按顺序把它们转换成字符(ASC码),存入ASCC开始的字节数据区。 data segment org 10H BCDC db 61H,11H,18H,27H,38H,51H,66H,83H,44H,55H ASCC db 20 DUP(?) data ends code segment assume cs:code ,ds:data start: mov AX,data mov ds,AX mov si,offset BCDC MOV DI,OFFSET ASCC MOV AX,0 mov cx,10

汇编语言实验指导书.

汇编语言实验指导书纪平张雷编写 安徽工业大学计算机学院 二00四年三月 目录 实验一DEBUG的启动及其基本命令的使用 (2 实验二内存操作数及寻址方法 (6 实验三汇编语言程序的调试与运行 (8 实验四查表程序设计 (10 实验五系统功能调用 (12 实验六循环程序设计 (13 实验七分支程序设计 (15 实验八子程序设计 (18 实验九综合程序设计 (20 附录实验报告 (21 实验一DEBUG的启动及其基本命令的使用一.实验目的: 掌握DEBUG 的基本命令及其功能 二.实验内容:

DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1、DEBUG程序的启动 在DOS提示符下,可键入命令: C>DEBUG[d:][path][文件名][ 参数1][参数2] 其中文件名是被调试文件的名称,它须是执行文件(EXE,两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需 的DEBUG命令。 在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。 2、DEBUG的主要命令 (1汇编命令A,格式为: -A[地址] 该命令从指定地址开始允许输入汇编语句,把它们汇编成机 器代码相继存放在从指定地址开始的存储器中。 (2反汇编命令U,有两种格式: 1-U[地址] 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上 一个U命令的最后一条指令的下一个单元开始显示32个字节。

汇编语言实验报告

汇编语言实验报告 专业: 班级: 姓名: 学号: 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个字节内容

相关文档
最新文档