汇编实验报告河北工业大学.docx

上传人:b****6 文档编号:6976004 上传时间:2023-01-13 格式:DOCX 页数:73 大小:1.59MB
下载 相关 举报
汇编实验报告河北工业大学.docx_第1页
第1页 / 共73页
汇编实验报告河北工业大学.docx_第2页
第2页 / 共73页
汇编实验报告河北工业大学.docx_第3页
第3页 / 共73页
汇编实验报告河北工业大学.docx_第4页
第4页 / 共73页
汇编实验报告河北工业大学.docx_第5页
第5页 / 共73页
点击查看更多>>
下载资源
资源描述

汇编实验报告河北工业大学.docx

《汇编实验报告河北工业大学.docx》由会员分享,可在线阅读,更多相关《汇编实验报告河北工业大学.docx(73页珍藏版)》请在冰豆网上搜索。

汇编实验报告河北工业大学.docx

汇编实验报告河北工业大学

实验一顺序与分支程序设计

一、实验目的

1)掌握顺序程序设计方法。

2)掌握分支程序的结构及分支程序的设计,调试方法。

2)学习数据传送及算术和逻辑运算指令的用法。

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

二、实验内容

1)有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。

源代码:

DATASEGMENT

BUF1DW9348H

BUF2DW4DUP(0),0AH,0DH,'$'

BUF3DW4DUP(0),'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVAX,BUF1

ADDAX,0

JSNEXT

MOVBUF2,AX

MOVBUF3,AX

JMPEEE

NEXT:

ANDAX,7FFFH

NOTAX

MOVBUF2,AX

INCAX

MOVBUF3,AX

EEE:

MOVCX,0004H

MOVDI,OFFSETBUF2

MOVDX,[DI]

ADDDI,03

BBB:

MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBQQQ

ADDAL,07H

QQQ:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04H

SHRDX,CL

POPCX

LOOPBBB

MOVCX,0004H

MOVSI,OFFSETBUF3

MOVDX,[SI]

ADDSI,03H

CCC:

MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBDDD

ADDAL,07H

DDD:

ADDAL,30H

MOV[SI],AL

DECSI

PUSHCX

MOVCL,04H

SHRDX,CL

POPCX

LOOPCCC

MOVDX,OFFSETBUF2

MOVAH,09H

INT21H

MOVDX,OFFSETBUF3

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

运行结果:

2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。

相加若有进位不存入存储单元。

源代码:

DATASEGMENT

ADB34H,18H,2DUP(0),'$'

BDB56H,83H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,A

MOVBL,B

ADDAL,BL

MOVAH,A+1

MOVBH,B+1

ADCAH,BH

MOVA,AL

MOVA+1,AH

MOVCX,0004H

MOVDI,OFFSETA

MOVDX,[DI]

ADDDI,03

NEXT:

MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBQQQ

ADDAL,07H

QQQ:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRDX,CL

POPCX

LOOPNEXT

MOVDX,OFFSETA

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

3)在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。

源代码:

STACKSEGMENTSTACK

DB1024DUP(0)

STACKENDS

DATASEGMENT

BUFDB70H,35H,1FH

MAXDB2DUP(?

),'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVAL,BUF

CMPAL,BUF+1

JNBLP1

MOVAL,BUF+1

LP1:

CMPAL,BUF+2

JAELP2

MOVAL,BUF+2

LP2:

MOVCX,02H

MOVDI,OFFSETMAX

MOVDL,AL

INCDI

LP3:

ANDAL,0FH

CMPAL,0AH

JBLP4

ADDAL,07H

LP4:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRDL,CL

POPCX

MOVAL,DL

LOOPLP3

MOVDX,OFFSETMAX

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

运行结果:

4)要求同上,只是比较的数为有符号数。

源代码:

STACKSEGMENTSTACK

DB1024DUP(0)

STACKENDS

DATASEGMENT

BUFDB98H,75H,32H

MAXDB2DUP(?

),'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVAL,BUF

CMPAL,BUF+1

JGLP1

XCHGAL,BUF+1

LP1:

CMPAL,BUF+2

JGLP2

XCHGAL,BUF+2

LP2:

MOVMAX,AL

MOVCX,02H

MOVDI,OFFSETMAX

MOVDL,[DI]

INCDI

LP3:

MOVAL,DL

ANDAL,0FH

CMPAL,0AH

JBLP4

ADDAL,07H

LP4:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRDX,CL

POPCX

LOOPLP3

MOVDX,OFFSETMAX

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

运行结果:

6)从键盘上接收一位十进制数X,计算Y值,并以十六进制形式显示出来,Y按下列公式计算。

源代码:

DATASEGMENT

XDB?

YDB?

DATAENDS

STACKSEGMENTSTACK

DW20HDUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

l0:

MOVDL,0AH

MOVAH,2

INT21H

MOVDL,0DH

INT21H

MOVAH,1

INT21H

SUBAL,30H

MOVX,AL

CMPX,3

JZl1

CMPX,4

JZl2

CMPX,5

JZl3

CMPX,6

JZl4

CMPX,0

JZl6

JMPl0

l1:

MOVAL,X

MULX

ADDAL,X

MOVY,AL

JMPl5

l2:

MOVAL,X

MULX

SUBAL,X

SUBAL,X

MOVY,AL

JMPl5

l3:

MOVAL,X

MULX

MOVY,AL

JMPl5

l4:

MOVAL,X

MULX

MOVBL,2

DIVBL

MOVY,AL

l5:

MOVDL,0AH

MOVAH,2

INT21H

MOVDL,0DH

INT21H

MOVDL,Y

MOVCL,4

SHRDL,CL

CMPDL,9

JLEl7

ADDDL,7

l7:

ADDDL,30H

MOVAH,2

INT21H

MOVDL,Y

ANDDL,0FH

CMPDL,9

JLEl8

ADDDL,7

l8:

ADDDL,30H

MOVAH,2

INT21H

JMPl0

l6:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

运行结果:

7)从键盘上接收两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。

源代码:

DATASSEGMENT

xdb?

ydb?

zdb?

sdb?

DATASENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

start:

movax,datas

movds,ax

l0:

movah,1

int21h

subal,30h

movx,al

movdl,0ah

movah,2

int21h

movdl,0dh

int21h

movah,1

int21h

subal,30h

movy,al

movdl,0ah

movah,2

int21h

movdl,0dh

int21h

movah,1

int21h

movz,al

cmpz,'a'

jzl1

cmpz,'b'

jzl2

cmpz,'c'

jzl3

cmpz,'d'

jzl4

cmpz,'q'

jzl7

l1:

moval,x

addal,y

movs,al

jmpl6

l2:

moval,x

subal,y

movs,al

cmps,0

jsl5

jnsl6

l3:

moval,x

muly

movs,al

jmpl6

l4:

moval,x

movbl,y

movah,0

divbl

movs,al

jmpl6

l5:

negs

jmpl6

l6:

movdl,0ah

movah,2

int21h

movdl,0dh

int21h

movdl,s

l9:

adddl,30h

movah,2

int21h

movdl,0ah

movah,2

int21h

movdl,0dh

int21h

jmpl0

l7:

movah,4ch

int21h

CODESENDS

ENDstart

运行结果:

实验二循环与子程序程序设计

一、实验目的

1)加深对循环结构的理解。

2)掌握循环程序的设计方法。

3)学习子程序的定义和调用方法。

4)掌握子程序、子程序的嵌套、递归子程序的结构。

5)掌握子程序设计、编制及调试。

6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容

1)编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。

源代码:

DATASEGMENT

BUFDB'S=1+2*3+3*4+4*5+…+N(N+1)+…=','$'

RESDW4DUP(0),'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETBUF

MOVAH,09H

INT21H

MOVDX,1

MOVBL,2

NEXT:

MOVAL,BL

INCBL

MULBL

ADDDX,AX

CMPAX,200

JNANEXT

MOVCX,0004H

MOVDI,OFFSETRES

ADDDI,03H

NEXT1:

MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBNEXT2

ADDAL,07

NEXT2:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRDX,CL

POPCX

LOOPNEXT1

MOVDX,OFFSETRES

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

2)将从3000H内存单元开始的100个字节存储单元全部清0。

源代码:

DATASEGMENT

ORG3000H

XDB100DUP(?

DATAENDS

STACKSEGMENTSTACK

DB10DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

LEASI,X

MOVCX,100

LP:

ANDBYTEPTR[SI],00H

INCSI

LOOPLP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

3)编制在屏幕上显示九九乘法表的程序。

源代码:

DATASEGMENT

XDB1

YDB1

ZDB1

SDB?

YSDB?

TENDB10

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX;装入段寄存器

L1:

MOVAL,X

MULY

MOVZ,AL

CALLSC

INCY

MOVBL,X

CMPY,BL

JAL2

JMPL1;内循环

L2:

INCX

CMPX,9H

JAL3

MOVY,1

MOVDL,0AH

MOVAH,02H

INT21H

MOVDL,0DH

MOVAH,02H

INT21H;输出回车换行

JMPL1;外循环

L3:

MOVAH,4CH

INT21H

SCPROC;输出子程序

ADDY,30H

MOVDL,Y

MOVAH,02H

INT21H;输出Y

MOVDL,'X'

MOVAH,02H

INT21H;输出X

ADDX,30H

MOVDL,X

MOVAH,02H

INT21H;输出X

MOVDL,'='

MOVAH,02H

INT21H;输出=

MOVAX,0

MOVAL,Z

DIVTEN

MOVS,AL

MOVYS,AH

cmps,1

jbl10

ADDS,30H

MOVDL,S

MOVAH,2

INT21H;输出高位结果

ADDYS,30H

MOVDL,YS

MOVAH,2

INT21H;输出低位结果;输出Z

MOVDL,''

MOVAH,02H

INT21H;输出一个空格

jmpl11

l10:

ADDYS,30H

MOVDL,YS

MOVAH,2

INT21H;输出低位结果

MOVDL,''

MOVAH,02H

INT21H;输出一个空格

MOVDL,''

MOVAH,02H

INT21H

l11:

MOVAX,0

MOVAL,X-30H

SUBX,30H

SUBY,30H

RET

SCENDP

CODEENDS

ENDSTART

运行结果:

 

4)编制在屏幕上显示用*组成的三角形的程序

源代码:

DATASEGMENT

NDB?

NNDB?

IDB1

DATAENDS

STACKSEGMENT

DW20DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAH,1

INT21H;输入一个数存入AL

MOVN,AL;输入的数存入N

SUBN,30H

MOVDL,0AH

MOVAH,2

INT21H

MOVDL,0DH

MOVAH,2

INT21H

L10:

MOVAL,N

SUBAL,I

MOVNN,AL

L2:

CMPNN,1

JBL1

MOVDL,''

MOVAH,02H

INT21H

DECNN

JMPL2;循环输出N-I个空格

L1:

MOVBL,I

SHLBL,1

SUBBL,1;(IX2)-1

L14:

MOVDL,'*'

MOVAH,02H

INT21H

DECBL

CMPBL,1

JBL3

JMPL14

L3:

MOVAL,N

SUBAL,I

MOVNN,AL

L4:

CMPNN,1

JBL5

MOVDL,''

MOVAH,02H

INT21H

DECNN

JMPL4;循环输出N-I个空格

L5:

MOVDL,0AH

MOVAH,2

INT21H

MOVDL,0DH

MOVAH,2

INT21H;输出回车换行

INCI

MOVBL,I

CMPBL,N

JAL6

MOVBL,0

JMPL10

L6:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

运行结果:

 

5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。

源代码:

STACKSEGMENTSTACK

DB1024DUP(0)

STACKENDS

DATASEGMENT

BUFDW0F101H,110DH,52H,100H,456H

COUNT=($-BUF)/2

RESULTDW4DUP(?

),'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

WDADDPROC

PUSHDI

MOVAX,0

MOVDX,0

MOVDI,OFFSETBUF

NEXT2:

ADDAX,[DI]

JNCNEXT1

INCDX

NEXT1:

ADDDI,2

LOOPNEXT2

POPDI

RET

WDADDENDP

SHOWPROC

PUSHCX

PUSHDI

MOVCX,04H

MOVDI,OFFSETRESULT

MOVBX,AX

ADDDI,07H

BBB:

MOVAX,BX

ANDAX,000FH

CMPAL,0AH

JBQQQ

ADDAL,07H

QQQ:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRBX,CL

POPCX

LOOPBBB

MOVCX,0004H

CCC:

MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBDDD

ADDAL,07H

DDD:

ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04H

SHRDX,CL

POPCX

LOOPCCC

POPDI

POPCX

RET

SHOWENDP

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVCX,COUNT

CALLWDADD

CALLSHOW

MOVDX,OFFSETRESULT

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

运行结果:

实验三算术运算与代码转换程序设计

一、实验目的

1)掌握算术运算程序的设计方法。

2)掌握代码转换程序的设计方法。

3)进一步掌握各种程序结构。

4)熟练掌握和使用用DEBUG调试程序。

二、实验内容

1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。

源代码:

DATASEGMENT

TABLEDWL1,L2,L3,L4,L5

BUFDB32H,20H,12H

NUMDB04H

DATAENDS

STACK1SEGMENTPARASTACK

DW20HDUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVBL,BUF

MOVBH,BUF+1

MOVCL,BUF+2

CMPBL,BH

JAL1

CMPBH,CL

JAL2

JMPL3

L1:

CMPBL,CL

JAL4

JMPL3

L2:

MOVDL,BUF+1

ANDDL,0F0H

SARDL,1

SARDL,1

SARDL,1

SARDL,1

ADDDL,30H

MOVAH,02H

INT21H

MOV

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

当前位置:首页 > 小学教育 > 语文

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

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