汇编语言程序设计实验文档格式.docx

上传人:b****6 文档编号:20228536 上传时间:2023-01-21 格式:DOCX 页数:32 大小:1,003.65KB
下载 相关 举报
汇编语言程序设计实验文档格式.docx_第1页
第1页 / 共32页
汇编语言程序设计实验文档格式.docx_第2页
第2页 / 共32页
汇编语言程序设计实验文档格式.docx_第3页
第3页 / 共32页
汇编语言程序设计实验文档格式.docx_第4页
第4页 / 共32页
汇编语言程序设计实验文档格式.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计实验文档格式.docx

《汇编语言程序设计实验文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验文档格式.docx(32页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计实验文档格式.docx

,13,10,'

$'

MESS2DB'

NOMATCH!

DATAENDS

codesegment

assumecs:

code,ds:

data,es:

data

mainprocfar

start:

:

pushds

subax,ax

pushax

movax,data

movds,ax

moves,ax

;

mainprogram

movcx,count

leasi,string1

leadi,string2

cld

repzcmpsb

jzmes1movdx,offsetmess2jmpdisp0

mes1:

movdx,offsetmess1disp0:

movah,9

int21hexit:

retmainendpcodeends

endstart修改字符串,使其不同,并对以上源程序重新汇编、连接、运行,结果输出为:

NOMATCH!

修改前:

修改后:

三、实验题。

1、上机完成以上示例程序。

2、完成课堂例题,并用DEBUG运行,观察结果。

datasegment

Xdb6

Ydb?

dataends

codesegment

data

movax,data

movds,ax

moval,x

movy,5

addy,al

movah,4ch

int21h

codeends

endstart

程序:

改变后:

实验三顺序结构程序设计

学习数据传送指令和算术运算指令的用法;

掌握数据定义伪指令的格式,会用DEBUG中的D命令观察DB、DW、DD存储数据的格式;

熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。

二、示例

试问如下程序执行到exit时,字单元A、B、D、D+1、D+2中的内容各是什么?

源程序如下:

adb10

bdw20

ddb30,40,50

assumecs:

moval,data

movds,ax

moval,d+1

addal,d

mova,al

addal,d+2

movb,al

addd,10

addd+1,20

addd+2,30

exit:

movah,4ch

int21h

endstart

阅读以上程序,运行程序并用debug调试分析出结果。

字单元A:

4C5A。

字单元B:

2B5A。

字单元D:

3C2B。

字单元D+1:

503C。

字单元D+2:

0050。

1、求表达式Y=A*X2+B*X+C的值,已知A、B、C分别存放在DATAA、DATAB、DATAC字节单元,X存放在TABL字节单元,结果Y放入RESULT字单元。

要求:

①在DEBUG下多次修改X的值,观察执行结果Y;

②修改原程序,从键盘上输入X的值,观察执行结果Y。

(见书P471)

①datasegment

dataadb1

databdb3

datacdw5

tabldb7

resultdw?

assumecs:

movax,data

movds,ax

moval,tabl

mulal

muldataa

movbx,ax

muldatab

addax,bx

addax,datac

movresult,ax

movah,4ch

int21h

endstart

运行结果为16进制的4B,即75,计算正确。

在修改X值为9后,运算结果为71,即113,计算正确。

继续修改X值为3,运行结果为17,即23,计算正确。

②datasegment

tabldb?

movah,01

subal,30h

movtabl,al

pushax

muldatab

popbx

从键盘上输入X值为7,输出结果为4B。

2、上机完成教材习题3.11(P108),写出正确结果。

tabledw10,20,30,40,50

entrydw3

ASSUMEDS:

data,cs:

code

movax,data

movbx,offsettable

addbx,entry

movax,[bx]

AX=1E00H。

四、实验报告

写出程序清单,记录运行结果;

总结DEBUG中U、E、D、T、G命令的功能。

U命令的功能:

将主存内容按照机器代码形成汇编指令显示;

E命令的功能:

用于修改主存内容;

D命令的功能:

显示主存单元的内容;

T命令的功能:

每执行一条指令就显示运行结果;

G命令的功能:

从指定地址处开始运行程序,直到遇到断点或者程序正常结束。

实验四循环结构程序设计

理解单重循环与多重循环程序的结构及执行过程;

掌握循环控制指令的用法,会使用数据串操作指令编程;

熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。

1、单循环程序

已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。

【参考程序如下】

DSEGSEGMENT;

定义段。

DATA1DB'

ABCDEFG3'

定义字符串赋值给变量。

DATA2DB'

ABCDEF3G'

CNTDW8;

定义变量。

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG;

赋值。

MOVDS,AX

MOVDL,31H;

LEASI,DATA1;

取变量的偏移地址。

LEADI,DATA2;

取变量的偏移地址、首地址。

MOVCX,CNT

DECSI;

SI自减。

DECDI;

DI自减。

AGAIN:

INCSI;

自增。

INCDI;

进行比较。

MOVAL,[SI];

地址的内容赋值给AL。

CMPAL,[DI];

LOOPZAGAIN;

如果相等,循环到AGAIN。

JZDISP;

若相等,则跳转到显示。

DECDL;

DL自减。

DISP:

MOVAH,2;

INT21H;

中断语句。

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

输入相同数据时:

ABCDEFGG'

ENDSTART

课堂实验内容:

教材习题5.2,习题5.17。

5.2:

DATASSEGMENT;

输入数据段代码。

DATASENDS

STACKSSEGMENT;

输入堆栈段代码。

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS;

MOVAX,DATAS

MOVDS,AX

MOVCX,2;

定义循环次数。

MOVAH,1;

中断,从键盘输入字符。

INT21H

MOVDL,AL;

把AL赋值给DL。

DECDL;

MOVAH,2;

中断指令,显示单个字符。

S:

INCDL;

自增1,CX自减1,CX不为0则继续循环。

MOVAH,2

DECCX

JNZS;

输入代码段代码。

MOVAH,4CH

CODESENDS

输入k,前导字符j,后续字符l,输出jkl,正确。

5.17:

MEMDB4DUP(?

);

定义数组。

STACKS

MOVAX,2A49H;

给AX赋值。

LEABX,MEM;

把数组MEM的首地址赋值给BX。

MOVCH,4;

给CH赋值。

即循环次数。

MOVDX,AX;

把AX的值赋给DX。

MOVCL,4;

给CL赋值。

即移位位数。

ANDDX,000FH;

相与,取出最低位。

ADDDX,30H

CMPDX,3AH

JLNEXT;

如果小于则跳转到NEXT。

ADDDX,07H;

如果大于就把DX加7。

NEXT:

MOV[BX],DX;

把DX赋值给BX下地址的内容,即数组。

INCBX;

BX自增1。

RORAX,CL;

将AX循环右移CL位。

DECCH;

CH自减。

如果不为0则跳转。

实验五分支结构程序设计

掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;

掌握标志位和转移指令之间的关系;

会用条件转移指令和无条件转移指令设计多分支结构程序;

掌握设置断点调试程序的方法。

简单分支结构

判断方程ax2+bx+c=0是否有实根,若有实根则将字节变量tag置1,否则置0(假设a、b、c均为字节变量,表达-127~+127的数据)。

当a=1,b=3,c=1时有实根。

程序如下:

运行结果如下:

当a=1,b=1,c=1时有实根。

(1)教材习题5.21。

arraydwx,y,z

movcx,0

movsi,0

movdi,2

callbj

movdi,4

movsi,2

cmpcl,3

jnzshow

movcl,2

show:

addcx,30h

movah,02h

movdl,cl

bj:

movax,ds:

array[si]

movbx,ds:

array[di]

cmpax,bx

jzxd

ret

xd:

inccx

1三个数都相等时的运行结果:

2三个数中有两个数相等的运行结果:

3三个数都不相等时的运行结果:

(2)已知DATAX和DATAY单元各存放一个带符号字节数据,从键盘上接收加(+)、减(-)、乘(*)或除(/)符号,然后完成相应运算,结果存入RLT单元。

dataxdb4h

dataydb5h

rltdb1dup(?

movbl,datax

movbh,datay

movah,01h

cmpal,'

+'

jejiafa

-'

jejianfa

*'

jechf

/'

jechufa

chufa:

moval,bl

subah,ah

divbh

movbl,al

jmpq5

chf:

moval,bh

mulbl

jianfa:

subbl,bh

jiafa:

addbl,bh

q5:

moval,bl

movcl,4

shral,cl

addal,30h

cmpal,39h

jbexianshi1

addal,07h

xianshi1:

movdl,al

movrlt,al

movah,02h

andal,0fh

jbexianshi2

xianshi2:

运行结果:

1加:

2减:

3乘:

4除:

实验六子程序设计

掌握子程序的设计方法;

理解子程序调用与返回指令的执行过程及堆栈的变化情况;

掌握子程序调用过程中主程序与子程序间的参数传递方式,掌握现场的保护与恢复方法,会编制嵌套子程序。

二、实验题

1、上机验证教材例6.3十进制到十六进制数的转换,仿照示例进行调试。

decihexsegment

decihex

mainprocfar

repeat1:

calldecibin

callcrlf

callbinihex

jmprepeat1

mainendp

decibinprocnear

movbx,0

newchar:

movah,1

subal,30h

jlexit

cmpal,9d

jgexit

cbw

xchgax,bx

movcx,10d

mulcx

addbx,ax

jmpnewchar

exit:

decibinendp

binihexprocnear

movch,4

rotate:

rolbx,cl

andal,0fh

addal,30h

cmpal,3ah

jlprintit

addal,7h

printit:

movah,2

decch

jnzrotate

binihexendp

crlfprocnear

movdl,0dh

movdl,0ah

crlfendp

decihexends

endmain

2、教材习题6.7。

datassegment

cjdb76,69,84,90,73,88,99,63,100,80

s6db0

s7db0

s8db0

s9db0

s10db0

datasends

codessegment

codes,ds:

datas

movax,datas

leasi,cj;

目标地址传送指令

movcx,10;

循环十次

s:

;

(子程序部分)

moval,[si]

movbl,10

divbl;

取个位数

subal,6

movbl,al

movbh,0

incs6[bx];

加1指令,跳转到下一个地址里面

incsi

loops;

对子程序进行循环

codesends

堆栈指针和栈顶由inc加1指令,跳转到下一个地址里面,从而使程序进行了循环运算。

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

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1