汇编语言实验报告.docx

上传人:b****5 文档编号:5158258 上传时间:2022-12-13 格式:DOCX 页数:29 大小:295.73KB
下载 相关 举报
汇编语言实验报告.docx_第1页
第1页 / 共29页
汇编语言实验报告.docx_第2页
第2页 / 共29页
汇编语言实验报告.docx_第3页
第3页 / 共29页
汇编语言实验报告.docx_第4页
第4页 / 共29页
汇编语言实验报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

汇编语言实验报告.docx

《汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告.docx(29页珍藏版)》请在冰豆网上搜索。

汇编语言实验报告.docx

汇编语言实验报告

汇编语言实验报告-

 

 

————————————————————————————————作者:

———————————————————————————————— 日期:

 

 

 

合肥工业大学

计算机与信息学院

实验报告

 

课  程:

汇编语言程序设计

专业班级:

信息安全11-1

学 号:

20112914

姓   名:

王佳淼

实验一  Debug程序的使用

一.实验目的

1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

二.实验内容

1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:

0200H和DS:

0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:

0200H单元和DS:

0204H单元中的数据相加,并将运算结果存放在DS:

0208H单元中。

要求:

本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

三.实验过程和程序

1、启动DOS操作系统

2、运行DEBUG.COM程序(若当前盘为C)

C:

>DEBUG↙

 –;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令)

3、用“A”命令编辑和汇编源程序

–A ↙

 186E:

0100  MOV AX,[0200]↙

186E:

0103  MOVBX,[0202]↙

 186E:

0107 ADDAX,[0204]↙ 

186E:

010B  ADC BX,[0206]↙

186E:

010FMOV[0208],AX↙

  186E:

0112MOV[020A],BX↙

 186E:

0116  ↙

4、用“U”命令反汇编验证源程序

–UCS:

0100↙

186E:

0100  A10002 MOV AX,[0200]

 186E:

01038B1E0202 MOV BX,[0202]

186E:

0107 03060402 ADDAX,[0204]

186E:

010B131E0602  ADCBX,[0206]

186E:

010F A30802   MOV  [0208],AX

186E:

0112891E0A02 MOV[020A],BX

 186E:

0116

注意:

●检查源程序是否有错误,若有则返回到第3步用“A地址”命令进行修改,直到程序无错误。

●DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。

●在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。

●在DEBUG下,大小写不敏感。

5、程序未执行前,用“R”命令观察,相关寄存器的内容。

–R↙

如:

(AX)=0000 ,(BX)=0000,(SI)= 0000 ,

  (DI)= 0000,(CS)=1376 ,(IP)=0100 。

6、在程序未执行前,用“D”命令观察DS:

0200H,DS:

0204H、DS:

0208H单元的内容

 –D20020B↙

7、用“G”命令运行源程序

–G=1000116↙

8、再用“D”命令观察DS:

0200H~DS:

020BH字节单元中的内容

–D20020B↙

9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。

注意:

●D命令显示内存数据,注意观察多字节数据在内存中的存放方式。

●指令执行的时候,IP寄存器随着变化,注意观察。

 

四.实验结果(包括必要的截图)

利用寄存器的方法:

 

 

五.实验体会

能使用debug在dos界面下编译代码。

能熟练使用各种debug命令,例如-u、-g、-d、-r等命令。

熟练掌握8086/8088的寻址方式及多字节数据的处理方法

实验二 汇编语言程序设计(顺序、循环)

一.实验目的

1、掌握顺序和循环程序结构和设计方法;

2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

二.实验内容

1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。

试编写汇编语言程序完成以下功能:

①计算表达式值(V–(X*Y+Z-720))/X;

②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

2、求一个班50名学生成绩的平均值(附加题:

最大值和最小值,并将结果显示出来)

3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:

查找中间是否有‘asm’子串。

如果有,输出‘Yes’;否则,输出‘No’)。

三.实验过程和程序

1、计算表达式并存入内存

Stack  segment

dw512dup(?

Stack    ends

Data  segment

ﻩxdw100

   ydw100

zdw 100

  vdw100

sum1dw?

sum2 dw?

Data    ends

Code     segment

assume cs:

code, ds:

data, ss:

stack

start:

movax,data

mov ds,ax

ﻩmovax,x;在代码段填入指令序列

ﻩmov bx,y

ﻩimul bx

ﻩaddax,zﻩ

adcdx,0

sub ax,720

sbbdx,0

movcx,dx

ﻩmovbx,ax

movax,v

cwd

ﻩsubax,bx

ﻩsbbdx,cx

ﻩmovbx,x

ﻩidivbx

movsum1,ax

ﻩmovsum2,dx

movah,4ch

ﻩint21h

Codeends

ﻩendstart

2、求出平均值、最大值、最小值

Stack segment 

ﻩdw512dup(?

Stack  ends

Data    segment

studb25dup(35,37)

  s1db'themax is:

$'

  s2db'theminis:

$'

   s3db'theavgis:

$'

  displaydb5dup('$')

 

Data  ends

Code  segment

assume cs:

code, ds:

data,ss:

stack

start:

 movax,data

movds,ax

ﻩﻩ;在代码段填入指令序列

ﻩmoval,0

  movsi,0

movcl,50

movbh,0;   max

ﻩmovbl,100;  min

again:

add al,stu[si]

  adcah,0

  cmpbh,stu[si]

ﻩjaL1

ﻩmovbh,stu[si]

L1:

cmpbl,stu[si]

jbL2

mov bl,stu[si]

L2:

ﻩincsi

ﻩloopagain

ﻩmovcl,50

divcl;  avg在al中

movcl,ah; 保存ah

leadx,s3

ﻩmovah,09h

ﻩint21h

ﻩmovah,cl

 

ﻩcallDISP

ﻩleadx,s2;最小值输出

movah,09h

int21h

 moval,bl

    callDISP

movah,02h;输出回车换行

movdl,0ah

int 21h

  movah,0dh

ﻩint 21h

ﻩleadx,s1;  最大值输出

ﻩmov ah,09h

int21h

   moval,bh

   callDISP

movah,4ch

ﻩint21h

DISP  proc

ﻩpush bx

cmp al,100

jzmf

ﻩcmpal,10

ﻩjbgw

ﻩmovah,0

movbl,10

divbl

ﻩaddal,30h

movdisplay[0],al

addah,30h

ﻩmovdisplay[1],ah

done:

ﻩleadx,display

mov ah,09h

int21h

  mov ah,02h;输出回车换行

ﻩmovdl,0ah

  int21h

   movah,0dh

int 21h

ﻩpop bx

ret

mf:

movdisplay[0],31h

ﻩmovdisplay[1],30h

mov display[2],30h

ﻩjmp done

gw:

addah,30h

movdisplay[0],ah

ﻩjmpdone

DISP ENDP 

Codeends

ﻩendstart

3、读入字符串

Code  segment

ﻩassume cs:

code,ds:

data

start:

  movax,data

ﻩmovds,ax

movah,0ah

ﻩleadx,x+2

ﻩint 21h

movah,02h;输出回车换行

ﻩmovdl,0ah

 int21h

 mov ah,0dh

ﻩint 21h

ﻩmovdx,offsetx+2

ﻩmov ah,09h

int21h

ﻩleasi,x

leadi,y

movbx,di

movah,48

again:

ﻩmovcx,3

repzcmpsb

jzfound

ﻩincsi

ﻩmovdi,bx

ﻩdecah

jnzagain

movah,02h;输出回车换行

ﻩmov dl,0ah

int21h

 movah,0dh

ﻩint21h

leadx,s2

jmpdone

found:

 leadx,s1ﻩ

done:

  movah,09h

  int21h

ﻩmovah,4ch

ﻩint 21hﻩ

Codeends

ﻩendstart

四.实验结果(包括必要的截图)

2.1

2.2

2.3

 

五.实验体会

通过此次试验,我掌握顺序和循环程序结构和设计方法,能在PC上对循环结构和顺序结构进行编程。

熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

ﻬ实验三 汇编语言子程序设计(分支、子程序)

一.实验目的

1、掌握分支和子程序结构和设计方法;

2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

3、通过汇编语言了解高级语言的参数传递等知识。

二.实验内容

1、1.BL中的只有一位为1。

编写程序测试,并输出提示信息“TheX Bit is1”,要求:

地址表和转移表。

2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

 

三.实验过程和程序

1、1. BL中的只有一位为1。

编写程序测试,并输出提示信息“TheXBitis1”,要求:

地址表和转移表。

;地址表法

Data segment

S1DB'The1Bit is1$'

 S2DB 'The2Bit is 1$'

 S3DB'The 3Bit is1$'

  S4DB 'The 4Bitis1$'

 S5DB 'The 5 Bit is 1$'

  S6DB'The6Bit is1$'

 S7DB'The7 Bitis1$'

 S8DB'The8 Bitis1$'ﻩ

addrtbdwL0,L1,L2,L3,L4,L5,L6,L7

Data ends

Code segment

ﻩassumecs:

code,ds:

data

start:

  movax,data

ﻩmov ds,ax

movbl,02h

ﻩmoval,0ffh

again:

incal

ﻩshrbl,1

jnc again

    shlal,1;al乘以2

      mov bl,al

    movbh,0

ﻩjmpaddrtb[bx]

ﻩmov ah,4ch

int21h

 

L0:

 leadx,S1

ﻩjmpoutput

L1:

 leadx,S2

ﻩjmp output

L2:

leadx,S3

jmpoutput

L3:

leadx,S4

jmpoutput

L4:

 leadx,S5

ﻩjmpoutput

L5:

    leadx,S6

ﻩjmpoutput

L6:

   leadx,S7

ﻩjmpoutput

L7:

  leadx,S8

ﻩjmpoutput

output:

movah,09h

int 21h

movah,4ch

ﻩint21h

Codeends

end start

 

;转移表法

Data  segment

S1DB'The 1Bitis1$'

S2DB 'The2Bitis1$'

S3 DB'The3Bit is1$'

S4DB'The 4 Bitis 1$'

S5DB'The 5 Bit is1$'

S6DB 'The6Bitis1$'

S7DB'The7 Bit is 1$'

  S8DB'The8 Bitis1$'

Data ends

Code   segment

assumecs:

code,ds:

data

start:

 movax,data

ﻩmovds,ax

   movbl,02h

ﻩmoval,-1

again:

ﻩincal

ﻩshrbl,1

ﻩjncagain

  mov ah,0

  movcx,ax

 shlax,1

 addax,cx;  al乘以3

 leasi,jmptb

 addsi,ax

 jmpsi

jmptb:

ﻩjmpL0

ﻩjmpL1

ﻩjmpL2

ﻩjmpL3

jmpL4

ﻩjmpL5

ﻩjmp L6

jmpL7

org$+80hﻩ

L0:

  leadx,S1

jmpoutput

L1:

  leadx,S2

ﻩjmpoutput

L2:

 leadx,S3

jmpoutput

L3:

  lea dx,S4

ﻩjmpoutput

L4:

    lea dx,S5

jmpoutput

L5:

 leadx,S6

jmpoutput

L6:

 lea dx,S7

jmp output

L7:

 leadx,S8

ﻩjmpoutput

output:

movah,09h

int21h

movah,4ch

ﻩint21h

Code ends

endstart

2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

;堆栈传递

Stack segment  

dw512dup(?

Stack  ends

Data segment

x dw100

ydw100

ﻩzdw100

Data  ends

Code  segment

assumecs:

code,ds:

data,ss:

stack

start:

 movax,data

ﻩmov ds,ax

subsp,2

movax,x

push ax

ﻩmovax,y

ﻩpushax

callP1

pop z

movax,z

movah,4ch

ﻩint 21h

P1  procnear

ﻩpushbp

movbp,sp

ﻩpushax

ﻩpushbx

pushcx

ﻩpushdx

movax,6[bp];x的值

movbx,4[bp];y的值

imul bx

ﻩmovcx,dx

movbx,ax

ﻩmovax,6[bp]

 cwd

addbx,ax

adc cx,dx

  movax,4[bp]

   cwd

   subbx,ax

   sbb cx,dx

ﻩmov 8[bp],bx

popdx

ﻩpopcx

ﻩpopbx

popax

popbp

ret4

P1endp

Codeends

ﻩendstart

;寄存器传递

Stack   segment 

ﻩdw 512dup(?

Stack  ends

Data  segment

xdw100

ydw 100

ﻩzdw?

Dataends

Code  segment

ﻩassumecs:

code,ds:

data,ss:

stack

start:

    mov ax,data

ﻩmov ds,ax

ﻩmov ax,x

movbx,yﻩ

ﻩcallP1

ﻩmovz,bx;bx做出口参数

  mov ax,z;方便查看输出是否正确

ﻩmovah,4ch

int21h

P1 procnear

pushax

ﻩpushcx

imulbx

movcx,dx

movbx,ax

movax,x

cwd

ﻩaddbx,ax

ﻩadccx,dx

ﻩmovax,y

cwd

ﻩsubbx,ax

ﻩsbbcx,dx

popcx

popax

ﻩret

P1endp

Codeends

ﻩendstart

四.实验结果(包括必要的截图)

寄存器方式

堆栈方式

 

五.实验体会

实验四汇编语言高级编程专题

一.实验目的

1、汇编语言宏程序设计;

2、掌握中断服务子程序的编写。

3、汇编语言与高级语言的混编。

二.实验内容

1、编写一个宏,求三个数的最小数,原型为:

MIN3 x,y,z,min

2、挂接1CH中断,正计时60秒后退出。

要求屏幕显示0-59的秒数。

 

三.实验过程和程序

1、编写一个宏,求三个数的最小数,原型为:

MIN3x,y,z,min

Stack    segment 

ﻩdw512dup(?

Stack    ends

Data segment

ﻩx db21

ﻩy db 33

ﻩzdb9

mindb?

Data    ends

Code  segment

assumecs:

code,ds:

data, ss:

stack

ﻩMIN3macro x,y,z,min;宏的定义

ﻩmoval,x

ﻩcmp al,y

ﻩjb huan

ﻩmov al,y

huan:

ﻩcmpal,z

ﻩjbdone

ﻩmoval,z

done:

 movmin,al

ﻩaddal,30h

mov dl,al

movah,2;定义输出,方便观察结果

int21h

   endm

start:

  movax,data

ﻩmovds,ax

ﻩMIN3 x,y,z,min

mov ah,4ch

ﻩint21h

Code ends

endstart

四.实验结果(包括必要的截图)

宏定义

计数器

 

 

五.实验体会

 

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

当前位置:首页 > 幼儿教育 > 育儿知识

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

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