汇编语言程序例题.docx

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

汇编语言程序例题.docx

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

汇编语言程序例题.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所示。

DATAﻩ SEGMENT

XﻩDW200

ﻩYﻩDWﻩ100

ﻩZﻩDWﻩ3000

ﻩVﻩDW10000

ﻩWﻩDWﻩ2DUP(?

DATAﻩ ENDS

STACK SEGMENT STACK

ﻩ      DB  200 DUP(0)

STACKENDS

CODESEGMENT

ﻩASSUMEDS:

DATA,CS:

CODE,SS:

STACK

START:

MOVAX,DATA

ﻩMOVDS,AXﻩ;DATA→AX

ﻩMOVAX,X

IMUL Yﻩ;(X)*(Y)→DX:

AX

ﻩMOVCX,AX

ﻩMOVﻩBX,DX;(DX:

AX)→(BX:

CX)

MOVAX,Z

ﻩCWDﻩﻩﻩ;(Z)符号扩展

ﻩADDCX,AX

ADCﻩBX,DXﻩ

ﻩﻩﻩ;(BX:

CX)+(DX:

AX)→(BX:

CX)

SUBCX,540

SBBﻩBX,0ﻩ;(BX:

CX)—540→(BX:

CX)

ﻩMOVﻩAX,V

CWDﻩﻩ;(V)符号扩展

ﻩSUBAX,CX

ﻩSBBDX,BX

ﻩ;(DX:

AX)—(BX:

CX)→(DX:

AX)

IDIV Xﻩﻩ;(DX:

AX)/X

MOVW,AXﻩ;商→W

MOVW+2,DXﻩ;余数DX→W+2

MOVAH,4CH

ﻩINT21H

CODEENDSﻩﻩ;退出DOS状态

END START

【例5。

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

编写程序如下:

STACKSEGMENTSTACK

ﻩDBﻩ200DUP(0)

STACKENDS

DATASEGMENT

ﻩTABDB 80,85,86,71,79,96

   DB83,56,32,66,78,84

ﻩNODB10

ﻩENGLISTﻩDB ?

DATA ENDS

CODESEGMENT

ASSUME DS:

DATA,SS:

STACK,CS:

CODE

BEGIN:

MOVﻩAX,DATA

ﻩﻩMOVDS,AX

LEAﻩBX,TAB 

ﻩMOVﻩAL,NO

DELﻩAL

ﻩXLATﻩTAB

ﻩ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

 MOVﻩDS,AX ﻩ;初始化

  MOVAL,X;X取到AL中

TESTAL,80H;测试AL正负

    ﻩJZNEXT ﻩ;为正,转NEXT

  NEGALﻩﻩ;否则AL求补

NEXT:

ﻩMOVﻩRESULT,AL;送结果

ﻩMOV ﻩAH,4CH

   ﻩINTﻩ21H ﻩﻩ;返回DOS

CODEENDS

 ENDﻩSTARTﻩ

【例5。

4】编写计算下面函数值的程序:

1X〉0

Y=ﻩ0ﻩX=0

 ﻩ—1ﻩX〈0

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

程序流程图如下图所示。

ﻩDATASEGMENT

XDB—25

YDB ?

DATAENDS

CODESEGMENT

 ASSUME  CS:

CODE,DS:

DATA

START:

MOVAX,DATA

 MOV DS,AX   ;初始化

 MOV AL,X ;X取到AL中

CMPﻩAL,0;Al中内容和0比较

JGEBIGﻩﻩ;大于等于0,转BIG

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

JMPﻩEXIT;转到结束位置

BIG:

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

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

ﻩJMPEXIT;转到结束位置

EE:

MOVBL,0;0送BL

EXIT:

MOV Y,BLﻩ;BL中内容送Y单元

MOV AH,4CH

INT 21Hﻩﻩ;程序结束

CODEENDS

 ENDSTARTﻩ;汇编结束

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

ﻩ设三个带符号数分别在三个字变量X、Y、Z中存储。

程序流程图如下图所示

STACKﻩSEGMENTSTACK

   DB 200DUP(0)

STACKﻩENDS

DATAﻩSEGMENT

Xﻩ  DW 00ABH

Yﻩ    DW–5

Z  DW 200

MAXﻩﻩDW ?

DATAﻩENDS

CODEﻩﻩSEGMENT

ASSUME DS:

DATA,SS:

STACK,CS:

CODE

START:

ﻩMOVﻩAX,DATA

ﻩ     ﻩMOVﻩDS,AX

ﻩ   ﻩMOVﻩAX,X

ﻩ  CMPAX,Y;X>Y?

   JGﻩL1

ﻩ     ﻩMOVAX,Yﻩ;Y>Z?

  CMPAX,Z

ﻩ  JGﻩEXIT

L2:

      MOVﻩAX,Z

ﻩ   ﻩJMPEXIT

L1:

ﻩﻩCMPAX,Zﻩ;X>Z?

ﻩﻩJLEﻩﻩL2

EXIT:

MOVﻩMAX,AX

ﻩ   MOVAH,4CH

  INTﻩﻩ21H

CODEﻩENDS

ﻩﻩENDSTART

【例5。

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

程序流程如图下所示。

DATASEGMENT

TABﻩDWP1,P2,P3,P4,P5,P6,P7,P8

NﻩDB 5

DATAﻩENDS

STACKSEGMENT

ﻩ     DB200DUP(0)

STACKﻩENDS

CODEﻩSEGMENT

ﻩ  ASSUMEDS:

DATA,SS:

STACK,CS:

CODE

START:

ﻩMOVﻩAX,DATA

ﻩMOVﻩDS,AX

ﻩﻩ┆

MOVAL,N

ﻩDELAL

ﻩADDAL,AL

ﻩMOVBL,AL

MOVBH,0

JMPTAB[BX]

P1:

……

ﻩﻩ┆

JMPEXIT

P2:

ﻩ……

ﻩ┆

JMPEXIT

P2:

ﻩ……

ﻩ┆

ﻩJMPEXIT

P3:

…… 

ﻩ┆

JMPﻩEXIT

ﻩ┆

P8:

ﻩ……

EXIT:

ﻩMOVﻩAH,4CH

ﻩ    INT21H

CODEﻩENDS

    ENDSTART

【例5。

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

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

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

例5.8】编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止.统计被累加的自然数的个数送CN单元,累加和送SUM。

流程图如下图所示。

 

 

ﻩDATASEGMENT

   ﻩSUMDW?

CNDW?

DATAﻩENDS

CODESEGMENT

  ﻩASSUME CS:

CODE,DS:

DATA

START:

ﻩMOV AX,DATA

   MOVDS,AX;初始化

 MOV AX,0   ﻩ;0送AX

MOVBX,0   ﻩ;0送BX

LP:

ﻩINC BX   ;BX加1

  ADDAX,BX;求累加和

  ﻩCMPAX,1000ﻩ;比较

 ﻩ ﻩJBE LP ﻩ;≤1000转

ﻩ  ﻩMOV SUM,AX

ﻩMOVCN,BX;送结果

    MOV AH,4CH

   ﻩINT 21H  ;返回DOS

CODEﻩENDS

ﻩ ENDSTART ;汇编结束

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

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

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

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

数ﻩ10ﻩ8169032

第一遍101690328

第二遍ﻩ169032ﻩ108

第三遍ﻩ9032ﻩ16ﻩ108

程序流程图如图5.9所示。

 

DATAﻩSEGMENT

BUFDW 3,-4,6,7,9,2,0,-8,—9,—10,20

N=($-BUF)/2

DATAﻩENDS

STACKSEGNMENTSTACK

DB 200DUP(0)

STACKﻩENDS

CODESEGMENT

ASSUME CS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

ﻩMOVﻩCX,N

DECﻩCX

LOOP1:

MOVﻩDX,CX

MOVBX,0

LOOP2:

ﻩMOVAX,BUF[BX]

ﻩCMPAX,BUF[BX+2]

ﻩJGEﻩL

XCHGAX,BUF[BX+2]

ﻩMOVBUF[BX],AX

L:

ﻩADDBX,2

DECﻩCX

ﻩJNEﻩLOOP2

ﻩMOVﻩCX,DX

LOOPﻩLOOP1

ﻩMOVAH,4CH

ﻩINT21H

CODEﻩENDS

ﻩENDSTART

程序运行后,BUF区中的内容如下:

20,9,7,6,3,2,0,-4,-8,-9,—10

若要对N个无符号数按由大到小的顺序排列,只需将指令“JGE L”改为“JAEL”即可。

【例5.10】将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元并显示。

如二进制数10010011转换成字符串为‘10010011’。

要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8倍和16倍二进制数的转换。

入口参数:

DX存放待转换的二进制数

CX存放待转换数的位

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

当前位置:首页 > 人文社科 > 教育学心理学

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

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