《汇编语言》实验讲义讲解.docx

上传人:b****3 文档编号:4368541 上传时间:2023-05-07 格式:DOCX 页数:41 大小:35.73KB
下载 相关 举报
《汇编语言》实验讲义讲解.docx_第1页
第1页 / 共41页
《汇编语言》实验讲义讲解.docx_第2页
第2页 / 共41页
《汇编语言》实验讲义讲解.docx_第3页
第3页 / 共41页
《汇编语言》实验讲义讲解.docx_第4页
第4页 / 共41页
《汇编语言》实验讲义讲解.docx_第5页
第5页 / 共41页
《汇编语言》实验讲义讲解.docx_第6页
第6页 / 共41页
《汇编语言》实验讲义讲解.docx_第7页
第7页 / 共41页
《汇编语言》实验讲义讲解.docx_第8页
第8页 / 共41页
《汇编语言》实验讲义讲解.docx_第9页
第9页 / 共41页
《汇编语言》实验讲义讲解.docx_第10页
第10页 / 共41页
《汇编语言》实验讲义讲解.docx_第11页
第11页 / 共41页
《汇编语言》实验讲义讲解.docx_第12页
第12页 / 共41页
《汇编语言》实验讲义讲解.docx_第13页
第13页 / 共41页
《汇编语言》实验讲义讲解.docx_第14页
第14页 / 共41页
《汇编语言》实验讲义讲解.docx_第15页
第15页 / 共41页
《汇编语言》实验讲义讲解.docx_第16页
第16页 / 共41页
《汇编语言》实验讲义讲解.docx_第17页
第17页 / 共41页
《汇编语言》实验讲义讲解.docx_第18页
第18页 / 共41页
《汇编语言》实验讲义讲解.docx_第19页
第19页 / 共41页
《汇编语言》实验讲义讲解.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《汇编语言》实验讲义讲解.docx

《《汇编语言》实验讲义讲解.docx》由会员分享,可在线阅读,更多相关《《汇编语言》实验讲义讲解.docx(41页珍藏版)》请在冰点文库上搜索。

《汇编语言》实验讲义讲解.docx

《汇编语言》实验讲义讲解

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

计算机系宋勤

2013-5

《汇编语言》实验学时分配表

序号

实验项目名称

实验学时

实验报告或作业

课内

课外

1

汇编语言程序上机过程以及调试

2

2

1

2

顺序程序设计

2

2

1

3

循环程序设计

2

2

1

4

分支程序设计

2

2

1

5

子程序设计

2

2

1

6

I/O程序设计

2

2

1

7

实验七综合程序设计

程序设计

2

2

1

合计

14

14

7

实验一汇编语言程序上机过程以及调试

一、预习内容

1. 工具软件MASM、LINK的使用

2. 常用DEBUG命令的使用:

G,D,R,T,U,Q

3. 完整程序设计方法的格式。

二、目的要求

1. 掌握常用工具软件MASM、LINK的使用

2. 掌握常用DEBUG命令:

G,D,R,T,U,Q能灵活使用这些命令调试程序

3. 掌握完整程序设计方法的格式,能正确书写数据段,代码段等。

三、实验内容

用两种方法把字符串mess1复制到mess2串中去;

(1)从左到右的方向复制

(2)从右到左的方向复制

datasegment

mess1db'mynameissongqin$'

dataends

EXTRAsegment

mess2db17dup(?

EXTRAends

;************************************************

codesegment

assumecs:

code,DS:

DATA,ES:

EXTRA

start:

movax,DATA

MOVds,ax

movax,EXTRA

MOVes,ax

leAsi,mess1

leAdi,mess2

movcx,017

CLD

repmovsB

ret

codeends

endstart

实验步骤:

1)用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在D:

\masm50下,注意保存时将文件扩展名改为.asm(如P77.asm)。

2)打开桌面的“命令提示符”程序进入dos命令操作,先用cdmasm50命令改变路经,接着用”masm+文件名”(如masmP77,这里文件名可以不带扩展名)对源文件进行汇编,产生.obj文件和.LST文件。

若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。

3)用”link+文件名”(如linkP77;)将.obj文件连接成可执行的.exe文件(P77.exe)。

4)用debug调试程序,熟悉debug命令的使用:

(1)打debugP77.exe进入debug控制,显示提示符‘-‘。

(2)用命令g执行程序,可得与步骤4相同的结果,也可用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况,并注意标志位有无变化。

(3)用命令u检查键入的程序并记录,特别注意左边的机器码和指令地址。

如果一条u命令没有显示完全,可以再次输入u命令,该命令会紧接着上一个命令的输出继续显示。

(4)用命令’g+地址’设置断点,如g06,表示将断点设置在代码段的偏移地址为06h的指令前,并执行到该断点前。

其中,命令中的地址项可以从上条命令u的运行结果获得。

(5)用命令r查看各寄存器的情况。

(6)用命令d0查看数据段的情况,0表示从偏移地址0开始,也可以指定其他偏移地址值。

(7)用命令‘e+地址’的方式修改数据区的字符串,其中’地址’指需要修改的数据段内存单元偏移地址,可根据上条d0命令获得。

如e09表示从偏移地址09h开始修改数据。

(8)再次用命令g执行程序,查看执行结果。

(9)用命令q退出debug,如果在上述步骤中碰到异常,可以先用q命令退出后再进入调试。

 

四、实验报告或作业

1.分析程序,画出程序流程图

2.汇编,连接及调试时产生的错误,其原因及解决办法。

3.思考:

1)上述实验中用e修改数据段的内容,是否改变原文件P77.asm的内容?

2)用单步执行命令t运行程序,运行到movax,4c00h,int21h指令后,cs和ip寄存器内容前后有何变化,产生变化的原因是什么?

附:

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起始地址结束地址目的地址

标志位显示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.常用工具软件MASM、LINK和DEBUG的使用

2.完整程序设计方法的格式

3.汇编语言顺序结构程序的设计方法

二、目的要求

1.继续熟悉常用工具软件MASM、LINK和DEBUG的使用

2.继续熟悉完整程序设计方法的格式

3.学习与掌握汇编语言顺序结构程序的设计方法

三、实验内容

编程实现datax双字除以字datay(用div),并且把商存入quotient字单元,把余数存入remainder字单元(具体数值可自行确定)。

并且用debug查看程序的运行结果,检查程序运行结果的正确性。

DSEGSEGMENT

dataxdd956123h

dataydw123h

quotientdw?

remainderdw?

DSEGENDS

CSEGSEGMENT

assumecs:

CSEG,ds:

DSEG

start:

movax,dseg

movds,ax

movax,datax

movdx,datax[2]

divdatay

movquotient,ax

movremainder,dx

movax,4c00h

int21h

CSEGENDS

endstart

实验步骤:

1.用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在D:

\masm50下,注意保存时将文件扩展名改为.asm(如lab2.asm)。

2.用masm对源文件进行汇编,产生.obj(如lab2.obj)文件和.LST文件。

若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。

3.用link将.obj文件连接成可执行的.exe文件(lab2.exe)。

4.直接运行link产生的.exe文件。

5.用debug调试程序,单步执行程序,并记录黑体部分单步执行后ax,dx,cs,ip寄存器以及标志寄存器的值.

6.在debug状态下,用“a+偏移地址”的方式将程序的div改为idiv再单步执行黑体部分,对比步骤5的结果,查看有何变化,并记录。

7.修改源程序实现双字datax与字datay的无符号乘法。

四、实验报告或作业

1.分析程序,画出程序流程图。

2.汇编,连接及调试时产生的错误,其原因及解决办法。

3.步骤5的结果记录。

4.步骤6的结果记录,并分析发生变化的原因。

5.思考:

1)指令movdx,datax[2]改写成movdx,[datax+2]经过汇编后,二者是否相同,为什么?

2)如何实现双字datax与字datay的乘法,写出完整的源程序。

实验三循环程序设计

A---------------------------------------------------A

实验A(必做)

一、       实验目的:

1     掌握循环程序的设计方法

2     进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。

3     学会针对不同的问题,选用不同的组织循环的方法。

二、    实验内容

1     编写一个程序,用二进制显示从键盘输入一个字符的ASCII码。

2     编写一个程序,记录某个字存储单元数据中1的个数,以十进制形式显示结果。

三、    实验准备

1     编写实验内容要求的两个程序。

2     写出调试以上程序,即修改程序参数,检查结果的操作方法。

3     熟悉源程序汇编、连接命令的使用方法即要回答的内容。

四、    实验步骤

1     用EDIT或其它编辑软件,编写.ASM源程序,例如Binary.ASM及Statistic.ASM。

2     对其进行汇编及连接,产生.EXE文件。

3     对.EXE文件进行调试运行。

a.      用DEBUG调试运行,学会修改AL内容的方法。

b.      对DSPKEY.EXE键入不同的字符,分别进行调试。

c.      在MS-DOS下运行这两个.EXE文件。

五、    实验报告要求

    画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。

六、参考程序段清单:

;Binary.asm

movcx,8;CX←8(循环次数)

again:

shlbl,1;左移进CF,从高位开始显示

movdl,0;MOV指令不改变CF

adcdl,30h;DL←0+30H+CF

;CF若是0,则DL←'0'

;CF若是1,则DL←'1'

movah,2

int21h;显示

loopagain

;CX减1,如果CX未减至0,则循环

;Statistic.ASM

;数据段

numberdw1110111111100100B

;代码段

movbx,number

xordl,dl;循环初值:

DL←0

again:

testbx,0ffffh;也可以用cmpbx,0

jzdone

;全部是0就可以退出循环,减少循环次数

shlbx,1;用指令shrbx,1也可以

adcdl,0

;利用ADC指令加CF的特点进行计数

jmpagain

done:

cmpdl,10;判断1的个数是否小于10

jbdigit;1的个数小于10,转移

pushdx

movdl,‘1’;1的个数大于或等于10

movah,2;则要先显示一个1

int21h

popdx

subdl,10

digit:

adddl,‘0’;显示个数

movah,2

int21h

A---------------------------------------------------A

B——————————————————————B

实验B

一、预习内容

1.多重循环程序和排序程序设计方法。

2.带符号数的比较转移指令:

JL,JLE,JG,JGE

二、目的要求

1.掌握多重循环程序和排序程序设计方法。

2.掌握带符号数的比较转移指令:

JL,JLE,JG,JGE

  

三、实验内容

建立学生名次表,以grade为首地址的数组中保存了学生的成绩,其中grade+i保存学号为i+1的学生的成绩。

要求建立一个10个字的rank数组,并根据grade中的学生成绩将学生名次填入rank数组中,其中rank+i的内容是学号为i+1学生的名次(提示:

一个学生的名次等于成绩高于该学生的人数加1)

DSEGSEGMENT

gradedw88,75,95,63,98,78,87,78,90,60

rankdw10dup(?

DSEGENDS

CSEGSEGMENT

assumecs:

CSEG,ds:

DSEG

start:

movax,dseg

movds,ax

movdi,10

movbx,0

loop:

movdx,1

movcx,10

next:

cmpax,[si]

jgeno_count

incdx

no_count:

addsi,2

loopnext

addbx,2

jneloop

movax,4c00h

int21h

CSEGENDS

endstart

实验步骤:

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

2.在DEBUG下运行此程序,记录运行结果。

3.将转移指令JGE改为JG,JL,JLE分别运行记录排序结果,察看结果是否正确不对,并分析原因。

四、实验报告或作业

1.分析程序,画出程序流程图

2.汇编,连接及调试时产生的错误,其原因及解决办法。

3.记录JGE情况下的排序结果,同时比较将转移指令JGE改为JG,JL,JLE时的排序结果,并分析结果正确与否,如果不正确,写出原因和解决办法。

4.思考:

如果想外循环也用loop实现,应该怎样修改程序?

B——————————————————————B

实验四分支程序设计

A---------------------------------------------------A

实验A(必做)

一、实验目的:

1     掌握分支程序的设计方法

2     掌握利用DEBUG修改参数、检查结果的方法。

3     掌握汇编语言源程序的编辑、汇编、连接及调试过程。

二、    实验内容

1     编写一个程序,显示AL寄存器中的两位十六进制数

2     编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。

三、    实验准备

1     编写实验内容要求的两个程序。

2     写出调试以上程序,即修改程序参数,检查结果的操作方法。

3     熟悉源程序汇编、连接命令的使用方法即要回答的内容。

四、    实验步骤

1     用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。

2     对其进行汇编及连接,产生.EXE文件。

3     对.EXE文件进行调试运行。

a.      用DEBUG调试运行,学会修改AL内容的方法。

b.      对DSPKEY.EXE键入不同的字符,分别进行调试。

c.      在MS-DOS下运行这两个.EXE文件。

五、    实验报告要求

    画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。

六、    参考程序清单

(1)     显示AL中两位十六进制数程序:

;DISPHEX.ASM

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAL,3EH

MOVBL,AL

MOVDL,AL

MOVCL,4

SHRDL,CL

CMPDL,9

JBENEXT1

ADDDL,7

NEXT1:

ADDDL,30H

MOVAH,2

INT21H;显示高位ASCII码

MOVDL,BL

ANDDL,0FH

CMPDL,9

JBENEXT2

ADDDL,7

NEXT2:

ADDDL,30H

MOVAH,2

VAH,2

INT21H;显示低位ASCII码

MOVAH,4CH

INT21H

CODEENDS;返回DOS

ENDSTART

(2)     显示键入字符程序

;DISPKEY.ASM

CODESEGEMENT

ASSUMECS:

CODE

START:

MOVAH,1

INT21H;等待键入字符,送AL

CMPAL,0DH;是否是回车符?

JZDONE;是则转DONE退出程序

CMPAL,’0’

JBNEXT

CMPAL,’9’

JACHARUP

MOVDL,AL

MOVAH,2

INT21H

JMPSTART

CHARUP:

CMPAL,41H

JBNEXT

CMPAL,5AH

JACHRDN

DISPC:

MOVDL,’C’

MOVAH,2

INT21H

NEXT:

JMPSTART

CHRDN:

CMPAL,61H

JBNEXT

CMPAL,7AH

JANEXT

JMPDISPC

DONE:

MOVAH,4CH

INT21H

CODE:

ENDS

ENDSTART

A------------------------------------------A

B—————————————————————B

实验B(选做)

一、预习内容

1.分支程序设计方法。

2.利用转移指令jl、jmp实现多岔分支的方法。

二、目的要求

1.掌握分支程序设计方法。

2.掌握利用转移指令jl、jmp实现多岔分支的方法。

三、实验内容

统计学生成绩result。

设有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单元中

DSEGSEGMENT

gradedw56,69,84,82,73,88,99,63,100,80

s5dw0

s6dw0

s7dw0

s8dw0

s9dw0

s10dw0

DSEGENDS

CSEGSEGMENT

assumecs:

CSEG,ds:

DSEG

start:

movax,dseg

movds,ax

movcx,10

movbx,offsetgrade

compare:

movax,[bx]

cmpax,60

jlfive

cmpax,70

jlsix

cmpax,80

jlseven

cmpax,90

jleight

cmpax,100

jnenine

nine:

incs9

jmpshortchange_addr

eight:

incs8

jmpshortchange_addr

seven:

incs7

jmpshortchange_addr

six:

incs6

jmpshortchange_addr

five:

incs5

change_addr:

movax,4c00h

int21h

CSEGENDS

endstart

实验步骤:

1.阅读程序,将程序补充完整。

2.输入,汇编并连接此程序。

3.在DEBUG下运行此程序,记录运行结果。

4.单步运行程序,记录前五次执行转移指令后寄存器csip的值。

四、实验报告或作业

1.分析程序,画出程序流程图。

2.汇编,连接及调试时产生的错误,其原因及解决办法。

3.每次执行转移指令时寄存器csip的值。

4、最终运行结果,即s5、s6、s7、s8、s9及s10的值。

5、思考:

如何修改程序使源程序先统计s10,然后依次统计s9,s8,s7,s6,s5?

B———————————————————————B

实验五子程序设计

A---------------------------------------------------A

实验A(必做)

本实验的目的在于让读者掌握同一模块调用的方法。

一、 实验目的

1      掌握主程序与子程序之间的调用关系及调用方法。

2      掌握子程序调用过程中近程调用与远程调用的区别。

3      掌握通过堆栈转送参数的方法。

二、实验内容

1      将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。

要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示.

2      编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数).

三、实验说明

1      第一个实验程序用子程序的近程调用实现。

由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。

实验过程中可以从堆栈的内容看到两个子程序的返回地址值。

由于是近调用,地址值只包括返回地址的段内偏移量。

在每个子程序的执行中,检查CS值是不变的。

2      第二个程序是利用远调用的方法调用子程序的。

在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。

子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。

3      第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。

一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈

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

当前位置:首页 > 法律文书 > 调解书

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

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