汇编语言程序例题知识讲解.docx

上传人:b****2 文档编号:18226 上传时间:2022-10-01 格式:DOCX 页数:23 大小:31.35KB
下载 相关 举报
汇编语言程序例题知识讲解.docx_第1页
第1页 / 共23页
汇编语言程序例题知识讲解.docx_第2页
第2页 / 共23页
汇编语言程序例题知识讲解.docx_第3页
第3页 / 共23页
汇编语言程序例题知识讲解.docx_第4页
第4页 / 共23页
汇编语言程序例题知识讲解.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

汇编语言程序例题知识讲解.docx

《汇编语言程序例题知识讲解.docx》由会员分享,可在线阅读,更多相关《汇编语言程序例题知识讲解.docx(23页珍藏版)》请在冰豆网上搜索。

汇编语言程序例题知识讲解.docx

汇编语言程序例题知识讲解

程汇题例序言语编.

精品文档

【例5.1】试编写一程序计算以下表达式的值。

w=(v-(x*y+z-540))/x

式中x、y、z、v均为有符号字数据。

设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图5.1所示。

DATASEGMENT

DW200X

DWY100

DWZ3000

DWV10000

DW

2DUP(?

)W

DATAENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

收集于网络,如有侵权请联系管理员删除.

精品文档

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX;DATA→AX

X,MOVAX

AX(*Y)→DX:

IMULY

;(X)

MOVCX,AX

MOVBX,DX;(DX:

AX)→(BX:

CX)

Z,MOVAX)符号扩展;(ZCWD

ADDCX,AX

ADCBX,DX

;(BX:

CX)+(DX:

AX)→(BX:

CX)

SUBCX,540

SBBBX,0;(BX:

CX)-540→(BX:

CX)

V

,MOVAXCWD;(V)符号扩展

SUBAX,CX

SBBDX,BX

;(DX:

AX)-(BX:

CX)→(DX:

AX)

;(DX:

AX)/X

IDIVX

MOVW,AX;商→W

;余数DX

MOVW+2,DX→W+2

收集于网络,如有侵权请联系管理员删除.

精品文档

MOVAH,4CH

INT21H

ENDS

;退出DOS状态CODE

ENDSTART

【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。

编写程序如下:

STACKSEGMENTSTACK

DB

200DUP(0)

STACKENDS

DATASEGMENT

TABDB80,85,86,71,79,96

DB83,56,32,66,78,84

NO

DB10

DB?

ENGLIST

DATAENDS

CODESEGMENT

ASSUMEDS:

DATA,SS:

STACK,CS:

CODE

BEGIN:

MOVAX,DATA

MOVDS,AX

LEABX,TAB

MOVAL,NO

DELAL

XLATTAB

MOVENGLISH,AL

MOVAH,4CH

INT21H

CODE

ENDS

收集于网络,如有侵权请联系管理员删除.

精品文档

ENDBEGIN

【例5.3】已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。

题目分析:

根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。

8086/8088指令系统中有专门的求相反数的指令NEG。

DATASEGMENT

XDB-25

RESULTDB?

DATAENDS

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

;初始化

MOVAL,X;X取到AL中

;测试AL正负TESTAL,80H

JZNEXT;为正,转NEXT

收集于网络,如有侵权请联系管理员删除.

精品文档

NEGAL;否则AL求补

NEXT:

MOVRESULT,AL;送结果

MOVAH,4CH

INT21H;返回DOS

CODEENDS

ENDSTART

【例5.4】编写计算下面函数值的程序:

1X>0

Y=0X=0

-1

X<0

设输入数据为X、输出数据Y,且皆为字节变量。

程序流程图如下图所示。

DATASEGMENT

XDB-25

YDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

收集于网络,如有侵权请联系管理员删除.

精品文档

MOVDS,AX;初始化

MOVAL,X;X取到AL中

CMPAL,0;Al中内容和0比较

JGE

BIG

;大于等于0,转BIG

MOVBL,-1;否则为负数,-1送BL

JMP

EXIT;转到结束位置

EE

;Al中内容是否为0,为0转EE

BIG:

JE

MOVBL,1;否则为大于0,1送BL

JMP

EXIT;转到结束位置

BL,0;0送BL

EE:

MOV

EXIT:

MOVY,BL;BL中内容送Y单元

MOVAH,4CH

INT21H;程序结束

CODEENDS

;汇编结束ENDSTART

【例5.5】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。

中存储。

程序流程图如下图Z、Y、X设三个带符号数分别在三个字变量所示

收集于网络,如有侵权请联系管理员删除.

精品文档

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

DATASEGMENT

XDW00ABH

YDW–5

DW200

Z

DW?

MAX

DATAENDS

CODESEGMENT

ASSUMEDS:

DATA,SS:

STACK,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

,XMOVAXY;AX,YX>?

CMP

L1

JG

;MOVAXZY>?

,Y

CMPAX,Z

JG

EXIT

L2:

MOVAX,Z

JMPEXIT

收集于网络,如有侵权请联系管理员删除.

精品文档

L1:

CMPAX,Z;X>Z?

L2

JLE

EXIT:

MOVMAX,AX

AH,4CH

MOV

INT21H

CODEENDS

ENDSTART

【例5.6】设某程序有8路分支,试根据给定的N值(1~8),将程序的执行转移到其中的一路分支。

程序流程如图下所示。

DATASEGMENT

TABDWP1,P2,P3,P4,P5,P6,P7,P8

NDB5

DATAENDS

STACKSEGMENT

DB200DUP(0)

STACKENDS

CODESEGMENT

ASSUMEDS:

DATA,SS:

STACK,CS:

CODE

收集于网络,如有侵权请联系管理员删除.

精品文档

START:

MOVAX,DATA

MOVDS,AX

MOVAL,N

DELAL

ADDAL,AL

MOVBL,AL

MOVBH,0

JMPTAB[BX]

P1:

……

JMPEXIT

P2:

……

JMPEXIT

P2:

……

JMPEXIT

P3:

……

JMPEXIT

P8:

……

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。

收集于网络,如有侵权请联系管理员删除.

精品文档

显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。

其程序流程图如下图所示。

例5.8】编写程序完成求1+2+3+……N的累加和,直到累加和超过1000。

流程图如下图SUMCN为止。

统计被累加的自然数的个数送单元,累加和送所示。

收集于网络,如有侵权请联系管理员删除.

精品文档

DATASEGMENT

SUMDW?

CNDW?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX;初始化

;0送MOVAX,0

AX

MOVBX,0;0送BX

LP:

INCBX;BX加1

ADDAX,BX;求累加和

;比较CMPAX,1000

JBELP;≤1000转

MOVSUM,AX

MOVCN,BX

;送结果

MOVAH,4CH

INT21H;返回DOS

CODEENDS

ENDSTART

;汇编结束

【例5.9】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。

收集于网络,如有侵权请联系管理员删除.

精品文档

我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。

可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,……整个排序过程最多需(N-1)遍。

如下面的4个数即是采用冒泡排序比较的例

子。

数108169032

第一遍816190320

第二遍890132610

第三遍32

8

916

0

10

程序流程图如图5.9所示。

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

当前位置:首页 > IT计算机

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

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