实验一DEBUG的使用.docx

上传人:b****3 文档编号:10409115 上传时间:2023-05-25 格式:DOCX 页数:21 大小:24.62KB
下载 相关 举报
实验一DEBUG的使用.docx_第1页
第1页 / 共21页
实验一DEBUG的使用.docx_第2页
第2页 / 共21页
实验一DEBUG的使用.docx_第3页
第3页 / 共21页
实验一DEBUG的使用.docx_第4页
第4页 / 共21页
实验一DEBUG的使用.docx_第5页
第5页 / 共21页
实验一DEBUG的使用.docx_第6页
第6页 / 共21页
实验一DEBUG的使用.docx_第7页
第7页 / 共21页
实验一DEBUG的使用.docx_第8页
第8页 / 共21页
实验一DEBUG的使用.docx_第9页
第9页 / 共21页
实验一DEBUG的使用.docx_第10页
第10页 / 共21页
实验一DEBUG的使用.docx_第11页
第11页 / 共21页
实验一DEBUG的使用.docx_第12页
第12页 / 共21页
实验一DEBUG的使用.docx_第13页
第13页 / 共21页
实验一DEBUG的使用.docx_第14页
第14页 / 共21页
实验一DEBUG的使用.docx_第15页
第15页 / 共21页
实验一DEBUG的使用.docx_第16页
第16页 / 共21页
实验一DEBUG的使用.docx_第17页
第17页 / 共21页
实验一DEBUG的使用.docx_第18页
第18页 / 共21页
实验一DEBUG的使用.docx_第19页
第19页 / 共21页
实验一DEBUG的使用.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验一DEBUG的使用.docx

《实验一DEBUG的使用.docx》由会员分享,可在线阅读,更多相关《实验一DEBUG的使用.docx(21页珍藏版)》请在冰点文库上搜索。

实验一DEBUG的使用.docx

实验一DEBUG的使用

实验一DEBUG的使用

实验目的:

1.学习使用DEBUG程序的各种命令。

2.掌握8088/86指令系统---算数指令。

3.掌握用DEBUG调试自编程序的方法。

4.掌握8088/8086CPU寄存器的用途和存储器组织及它们之间的关系。

5.掌握内存操作数及寻址方法。

6.掌握汇编语言伪操作:

BYTEPTR,WORDPTR。

内容及步骤:

一、DEBUG命令使用:

1、敲DEBUG进入DEBUG环境,显示提示符'_'。

2、用命令D10010F观察内存中的16进制码及屏幕右边的ASCII字符。

3、用命令E100303132……3F将30H~3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?

4、用命令F10010F'A'将'A'的ASCII码填入内存,用D命令查看结果。

5、用命令F11011F41将41H填入内存,用D命令观察结果并比较。

6、用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。

7、用R命令将AX,BX内容改写为1234H及5678H。

8、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

(1)34H,22H

(2)56H,78H(3)A5,79H(4)1284H,5678H(5)A758,347FH

二、8088常用指令练习

1、传送指令

1)用A命令在内存100H处键入下列内容:

MOVAX,1234

MOVBX,5678

XCHGAX,BX

MOVAH,34

MOVAL,56

MOVCX,75AB

XCHGAX,CX

2)用U命令检查键入的程序,特别注意左边的机器码。

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。

并注意标志位有无变化。

2、加减法指令:

1)用A命令在内存200H处键入下列内容:

MOVAH,34

MOVAL,2E

ADDAL,AH

SUBAL,78

MOVCX,1234

MOVDX,5678

ADDCX,DX

SUBCX,AX

SUBCX,CX

2)用U命令检查键入的程序及对应的机器码。

3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。

思考题:

这次运行还是打入T,行不行?

如何单步运行上述小程序?

用R命令检查一下IP的内容。

注意T命令与IP的关系。

3、带进位加减法:

1)用A命令在内存300H处键入下列内容,并用U命令检查:

MOVAH,12

MOVAL,89

MOVCH,56

MOVCL,98

ADDAL,CL

ADCAH,CH

MOVDH,A7

MOVDL,58

SUBDL,7F

SBBDH,34

2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。

3)上面这段程序若改用16位操作指令达到同样结果,怎么改?

试修改并运行之。

4、BCD码加减法

1)内容:

MOVAL,58

ADDAL,25

DAA

2)要求:

用A命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。

三、内存操作数及各种寻址方式使用:

1)用A命令在内存400H处键入下列内容,并用U命令检查:

MOVAX,1234

MOV[1000],AX

MOVBX,1002

MOVBYTEPTR[BX],20

MOVDL,39

INCBX

MOV[BX],DL

DECDL

MOVSI,3

MOV[BX+SI],DL

MOV[BX+SI+1],DL

MOVWORDPTR[BX+SI+2],2846

2)用T命令逐条运行这些指令,每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

注意:

D命令显示结果中右边的ASCII字符及双字节数存放法。

思考题:

有关指令中BYTEPTR及WORDPTR伪操作不加行不行?

试一试。

四、DEBUG下汇编运行程序方法

用A命令汇编程序,编程完成将DS:

1000开始的10个字节的内存单元的内容相加,并把相加结果存放在DS:

200A内存单元中,用DEBUG调试运行该程序,并察看运行结果。

内容:

MOVCX,0AH

MOVAL,0

MOVBX,1000

LL:

ADDAL,[BX]

INCBX

DECCX

JNZLL

MOV[BX],AL

INT3

步骤:

1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入JNZ指令时LL用实际地址值代替。

2)用U命令检查键入的程序及对应的机器码。

3)用E10000102030405060708090A将1000H开始的前10个内存单元的内容修改为01,02,03,04,05……0A,用D命令查看修改结果。

4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。

5)用F2000l0A02030405……0B将1000H开始的10个内存单元的内容修改为02,03,04,05……0B。

用D命令查看修改结果。

6)用G=100全速运行上述小程序,用D1000100F查看运行结果。

思考题:

可否随意在DEBUG提示符“-”后不带参数发出命令G?

什么情况下使用命令G时,可不用“=”给出执行的首地址?

实验报告:

1、列出8088常用指令练习部分的逐条运行记录。

2、列出DEBUG下调式运行小程序的运行步骤和运行结果。

3、回答思考题。

附:

DEBUG使用:

1、打DEBUG进入DEBUG,显示提示苻'_'。

2、退出DEBUG命令:

Q

3、显示内存命令:

D起始地址结束地址

4、修改内存命令:

E起始地址,连续修改打空格键。

打回车键退出E命令。

5、检查寄存器命令:

R

标志位显示10

CFCYNC

ZFZRNZ

SFNGPL

AFACNA

OFOVNV

PFPEPO

DFDNUP

IFEIDI

6、修改寄存器命令:

R寄存器名

7、小汇编命令:

A起始地址,不输入指令打回车键退出A命令。

8、反汇编命令:

U起始地址结束地址

9、文件命名命令:

N盘号:

文件名

10、读文件命令:

L内存地址

11、写文件命令:

W内存地址

10、读扇区命令:

L内存地址盘号(0--A:

1--B:

)扇区号扇区数

11、写扇区命令:

W内存地址盘号扇区号扇区数

12、运行命令:

G=起始地址结束(断点)地址

13、单步命令:

T=起始地址运行指令数,进入子程序内部。

14、单步命令:

P=起始地址运行指令数,不进入子程序内部。

15、内存搬家命令:

M起始地址结束地址目的地址

实验二数码转换程序

实验目的:

1、掌握二进制和十进制数转换程序的编制和调试。

2、掌握批处理文件的编制及使用。

3、熟悉双字节乘法的编程方法。

实验内容及步骤:

一、数码转换程序

1、将一个十六位二进制数转换成十六进制数显示。

CODESEGMENT

ASSUMECS:

CODE

BEGIN:

MOVBX,1011000101010111B

MOVCH,4

MOVCL,4

ROLT:

ROLBX,CL

MOVDL,BL

ANDDL,0FH

CMPDL,9

JLEL

ADDDL,7

L:

ADDDL,30H

MOVAH,2

INT21H

DECCH

JNZROTL

MOVDL,’H’

MOVAH,2

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEG

进入汇编集成环境,输入、汇编、连接和运行此程序,观察结果。

2、将一个十六位二进制数转换成十进制数并显示输出。

<参考程序>

DATASEGMENT

BUF0DW2768H

BUF1DB5DUP(0)

BUF2DW10000,1000,100,10,1

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

BEG:

MOVAX,DATA

MOVDS,AX

MOVAX,BUF0

MOVBX,OFFSETBUF1

MOVSI,OFFSETBUF2

MOVCX,5

L:

MOVDX,0

DIVWORDPTR[SI]

ADDAL,30H

MOV[BX],AL

INCBX

ADDSI,2

MOVAX,DX

LOOPL

MOVAH,9

MOVDX,OFFSETBUF1

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEG

进入汇编集成环境,输入、汇编、连接和运行此程序,观察结果。

二、自动汇编,连接及转换的批处理文件:

1、用EDIT或COPYCONALK.BAT命令将下列程序输入:

echooff

masm%1;

echoifyoudonotlink,strikeCtrl-Breakforquit;andeither:

pause

link%1;

del*.obj

echoifthefileis.exe,pleasstrikeCtrl-Breakforquit。

andeither:

pause

exe2bin%1、exe%1、com

del%1、exe

2、利用ALK.BAK文件汇编连接二个以前通过的源文件(COM型及EXE型)。

三、双字节乘法程序:

<参考程序>

dispmacromess

leadx,mess

movah,9

int21h

endm

stacksegmentstack

db256dup(0)

stackends

datasegment

bufdb7

db?

db15dup(?

messadb'pleasinputnumberA!

:

$'

messbdb0dh,0ah,'pleasinputnumberB!

:

$'

linefddb0dh,0ah,'$'

bcddd1000000000,100000000,10000000

dd1000000,100000,10000,1000

dd100,10,1

dataends

codesegment

assumecs:

code,ds:

data,ss:

stack

mainprocfar

pushds

xorbx,bx

pushbx

movax,data

movds,ax

dispmessa

callget

pushbx

dispmessb

callget

displinefd

popax

mulbx

movcx,10

leasi,bcd

leadi,buf

lop:

callbinec

looplop

movbyteptr[di],'$'

dispbuf

ret

mainendp

getproc

leadx,buf

movah,0ah

int21h

leasi,buf+1

xorbx,bx

movah,bh

movcl,[si]

next:

incsi

addbx,bx

movdx,bx

addbx,bx

addbx,bx

addbx,dx

moval,[si]

andal,0fh

addbx,ax

deccl

jnenext

ret

getendp

binecproc

movbl,0

again:

subax,wordptr[si]

sbbdx,wordptr[si+2]

incbl

jncagain

addax,wordptr[si]

adcdx,wordptr[si+2]

addbl,2fh

mov[di],bl

incdi

addsi,4

ret

binecendp

codeends

endmain

步骤:

1、输入,汇编并连接此程序。

2、在DOS下运行此程序,根据提示输入二个乘数,检查并记录结果。

思考题:

本程序的输入范围是多少?

若超过范围,会产生什么现象?

试一试!

四、根据上题,按下列要求选做一个修改程序:

1、带符号数16位乘法。

2、无符号数16位乘法,输入超过范围时能告警并要求重输。

实验报告:

1、列出实验记录。

2、列出调试通过程序清单并加注释。

3、回答思考题.

4、写出心得体会。

实验四子程序

实验目的:

1、掌握一般子程序的调用和返回,熟悉定义过程的伪指令。

2、掌握利用堆栈传递参数的子程序调用方法。

3、掌握子程序递归调用方法。

实验内容及步骤:

一、利用堆栈传递参数的子程序调用。

(求累加和)

<参考程序>

stacksegmentstack

db256dup(0)

stackends

datasegment

ary1db1,2,3,4,5,6,7,8,9,10

count1equ$-ary1

sum1dw?

ary2db10,11,12,13,14,15,16,17,18

count2equ$-ary2

sum2dw?

dataends

mainsegment

assumecs:

main,ds:

data,ss:

stack

startprocfar

pushds;PSP段基址压栈

xorax,ax

pushax;双字节0压栈

movax,data

movds,ax

movax,count1

pushax

leaax,ary1

pushax

callfarptrsum

movax,count2

pushax

leaax,ary2

pushax

callfarptrsum

ret;返回DOS

startendp

mainends

procesegment

assumecs:

proce

sumprocfar

movbp,sp

movcx,[bp+6]

movbx,[bp+4]

xorax,ax

adn:

addal,[bx]

adcah,0

incbx

loopadn

mov[bx],ax

ret4

sumendp

proceends

endstart

步骤:

1、输入,汇编并将此程序连接成EXE文件。

2、用DEBUG的断点命令和T命令运行此程序,观察并记录每次过程调用及进出栈指令前后(带';'的语句)的SP和堆栈内容。

3、记录最后结果:

SUM1,SUM2的段及偏移地址和它们的内容。

思考题:

1、sum子程序结尾为什么要用ret4返回?

2、什么是程序段前缀PSP?

二、完成一个四位十进制数相加的程序设计,形式为:

2345+7869=?

要求:

1设计一个子程序,完成从键盘输入一个四位十进制数的操作。

2设计一个子程序,完成将缓冲区数送屏幕显示功能。

3设计一个子程序,完成两个数相加操作。

三、子程序递归调用(求阶乘)。

<参考程序>

stacksegmentstack

db100hdup(?

stackends

datasegment

resuldw?

dataends

codesegment

mainprocfar

assumecs:

code,ds:

data,ss:

stack

start:

pushds

subax,ax

pushax

movax,data

movds,ax

movax,5

callfact

movresul,ax

ret

factproc

andal,al

jneiia

moval,1

ret

iia:

pushax

decal

callfact

x2:

popcx

mulcl

ret

factendp

mainendp

codeends

endstart

步骤:

1、将程序输入,汇编并连接成EXE文件。

2、用DEBUG的断点和T命令检查并记录每层递归嵌套过程的堆栈和AL内容。

3、修改源程序,将阶乘数3改为本程序的最大允许值(是多少?

),重新汇编连接之。

用DEBUG运行并记录RESUL单元内容。

4、若要在DOS命令下直接运行并显示阶乘结果(16进制形式),试修改程序并

调试运行。

(机动)

四、自编程序:

用递归方法编程实现两个正整数M和N相乘。

编程说明:

正整数M和N相乘可看作如下形式的递归函数:

MULT(M)=

若设N=15,M=4,则

MULT(4)=MULT(3)+15=MULT

(2)+15+15=MULT

(1)+15+15+15=15+15+15+15=60=3CH

实验报告:

1、列出实验记录。

2、列出自编程序清单并加注释。

3、回答思考题.

4、写出心得体会。

实验五宏指令及宏调用

实验目的:

1、熟悉宏定义的一般结构。

2、掌握宏指令的编写方法和调用方法。

3、能区别宏调用和子程序调用的不同之处。

4、了解LOCAL伪操作的用法。

5、熟悉无参数宏指令和有参数宏指令的定义与调用。

实验内容:

一、无参数宏指令的定义与调用

<参考程序>

CRLFMARCO;宏定义

MOVAH,02H

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

ENDM

DATASEGMENT

STR1DB‘PLEASEINPUTSTRING1:

$’

STR2DB‘PLEASEINPUTSTRING2:

$’

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVCX,10

AGAIN:

MOVAH,09H

LEADX,STR1

INT21H

CRLF;宏展开

MOVAH,09H

MOVDX,OFFSETSTR2

INT21H

CRLF;宏展开

LOOPAGAIN

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

实验六综合程序设计

实验目的:

掌握系统程序设计的方法,全面巩固所学知识内容,提高实际应用能力和应用水平。

实验内容:

题目一、学生成绩管理程序

题目二、员工工资管理程序

实验报告:

1、给出调试通过的程序清单,并附文档说明书。

2、调式中所遇到的问题及解决办法及体会。

实验六综合程序设计

实验目的:

掌握系统程序设计的方法,全面巩固所学知识内容,提高实际应用能力和应用水平。

实验内容:

题目一、学生成绩管理程序

题目二、员工工资管理程序

实验报告:

1、给出调试通过的程序清单,并附文档说明书。

2、调式中所遇到的问题及解决办法及体会。

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2