汇编语言上机实验二_第1页
汇编语言上机实验二_第2页
汇编语言上机实验二_第3页
汇编语言上机实验二_第4页
汇编语言上机实验二_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言上机实验(二)

4学时实验二数制、码制和子程序的编程与调试

一.实验目的:1.熟练掌握编写汇编语言原程序的基本方法和基本框架。2.熟练使用DEBUG调试程序。3.掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换。4.掌握用DOS功能调用,实现字符的输入和显示。5.掌握子程序的编程与调试方法。二.实验内容:1、从键盘输入两个2位十进制正数转换成二进制数后,对这两个数进行相加相乘运算,结果以十六进制数形式显示在屏幕上。2、从键盘输入两个2位十进制正数转换成组合BCD码后,对这两个数进行相加相乘运算,结果以十进制形式显示在屏幕上。3、从键盘输入一个4位十进制正数并回显后,将其对应的十六进制数显示在屏幕上。三、实验要求及调试步骤程序说明。说明程序的功能、结构。调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。写出源程序清单和执行结果。【举例】从键盘输入4位十六进制数(它对应的二进制数是补码表示的带符号数),把它们转换为带符号非组合型BCD码,并在屏幕上显示出来。从键盘输入1~4位十六进制数,存放在以HEXBUF+2为首址的4个字节单元中。其中HEXBUF+1单元中为输入的数据个数。字符串输入功能调用(0AH号功能调用)

格式: MOVDX,已定义缓冲区的偏移地址

MOVAH,0AH

INT21H功能:从键盘接收字符,并存放到内存缓冲区。①执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,字符个数应包括回车符0DH在内,不能为“0”值。第二个字节保留,在执行程序完毕后存入输入的实际字符个数。从第三个字节开始存入从键盘上接收字符的ASCII码。若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0。若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用,且响铃示警,一直到输入回车键为止。整个缓冲区的长度等于最大字符个数再加2。

②应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。……BUF

DB25;缓冲区长度

ACTHAR

DB?;保留单元,存放输入的实际字符个数

CHAR

DB25DUP(?);定义25个字节存储空间

DB‘$’

……

MOVAX,DATA

MOVDS,AX

……

MOVDX,OFFSETBUF

MOVAH,0AH

INT21H

……

本例可从键盘接收23个有效字符并存入以BUF

为首地址的缓冲区中。将ASCII码表示的4位十六进制数转换为16位二进制数,并暂时存放在

BX中;

字符对应的ASCII码0~930H~39HA~Z41H~5AH换行0AH回车0DHESC键1BH空格20H确定十进制数的符号,并把符号(+或-)存放在BCDBUF单元中;使用指令TEST对最高位进行判定,如若最高位为1,则是负数,反之。对BX中的二进制数采用前述算法转换为十进制数(非组合型BCD码),转换结果存放在以BCDBUF+1为首址的5个字节单元中;把转换结果的5个非组合型BCD码形成相应的ASCII码。

组合BCD码是用4个二进制位表示一个十进制位,如:

MOVAL,68H

MOVBL,28H

ADDAL,BL

;AL=68H+28H=90H DAA

;十进制调整:AL=96H

非组合BCD码是用8个二进制位表示一个十进制位。如:

MOVAX,0608H MOVBL,09H

ADDAL,BL

;AL=08H+09=11H

AAA

;十进制调整:AX=0107H显示结果屏幕显示字符串(9号功能调用)格式: MOVDX,字符串的偏移地址

MOVAH,09H

INT21H在使用9号功能调用时,应当注意以下问题:

①待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。

②应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。

… BUF

DB‘HOWDOYOUDO?’,0AH,0DH,‘$’

MOV

AX,DATA MOV

DS,AX

MOV

DX,OFFSETBUF

MOV

AH,09H

INT

21H

执行程序,在屏幕上显示“HOWDOYOUDO?”字符串。实验要求一参考程序:TITLECONVERTHEXADECIMALTOBCDDATASEGMENTPROMPTDB"INPUTHEXADECIMAL(4DIGITS):$'HEXBUFDB5,0,5DUP(0)DISPDB0AH,0DHBCDBUFDB6DUP(0),'$'DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1HEXBCD:MOVAX,DATAMOVDS,AX;输入1~4位十六进制数

LEADX,PROMPT;显示提示信息

MOVAH,09HINT21HLEADX,HEXBUF;输入数据

MOVAH,0AHINT21H;ASCII码转换为16位二进制数并存入BX中

LEASI,HEXBUF+2;取十六进制数ASCII码首址

MOVBX,0;暂存二进制数的寄存器清零

MOVCH,HEXBUF+1;取输入数据个数HEX1:MOVAL,[SI];取一个十六进制数字符

CMPAL,'9'JBENUMB;小于等于‘9’是数字符SUBAL,07H;是字母符

NUMB:ANDAL,0FHMOVCL,4SALBX,CLORBL,ALINCSIDECCHJNEHEX1;确定十进制数的符号

MOVBCDBUF,'+'TESTBX,8000HJNSPLUS;是正数

MOVBCDBUF,'-';是负数

NEGBX;求补后变为原码;将二进制数转换为非组合型BCD码,从二进制数高位起,进行15次加和乘PLUS:MOVCH,0FH;“加乘”运算的次数LOP0:SHLBX,1;最高位二进制数送CFCALLADDIT;先加1位二进制数

CALLMULTI;再乘2DECCHJNELOP0SHLBX,1;加最低位二进制数

CALLADDIT

;把非组合型BCD码转换为ASCII码形式

LEADI,BCDBUF+1MOVCX,5LOP1:ORBYTEPTR[DI],30HINCDILOOPLOP1;显示结果

LEADX,DISPMOVAH,09HINT21HMOVAH,4CH;程序结束

INT21H;多字节BCD码加1位二进制数子程序ADDITPROCLEADI,BCDBUF+5;从低位开始

MOVCL,5;取字节数ADD1:MOVAL,[DI];取BCD码

ADCAL,0;加二进制数位(CF)AAA;十进制数运算校正

MOV[DI],AL;存BCD码

DECDIDECCLJNEADD1RETADDITENDP;多字节BCD码乘2子程序MULTIPROCLEADI,BCDBUF+5;从低位开始

MOVCL,5CLCMUL1:MOVAL,[DI];取BCD码

ADCAL,AL;乘2AAA;十进制数运算校正

MOV[DI],AL;存BCD码

DECDIDECCLJNEMUL1RETMULTIENDPCOSEGENDSENDHEXBCD程序详解

假定我们要对4位二进制数(0110)进行转换。首先BX=0110,设置的BCDBUF为三个字节空间,Ch=3

Lop0:bx=1100cl=2cf=0

执行calladdit有:

al=0adcal,0;al=0aaa;al=0cl=1;重复有:

al=0adcal,0;al=0aaa;al=0cl=0执行callmulti有:

cf=0cl=2al=0adcal,0;al=0aaa;al=0cl=1;重复有:

al=0adcal,0;al=0aaa;al=0cl=0第二轮循环ch=2bx=1000cf=1Lop0:cl=2Calladdit有:Al=0Adcal,0;al=1Aaa;al=1Cl=1cf=0重复有:Al=0Adcal,0;al=0Aaa;al=0Cl=0Cl=2cf=0Callmulti有:Al=1Adcal,al;al=2Aaa;al=2Cl=1cf=0重复有:Al=0Adcal,al;al=0Aaa;al=0Cl=0第三轮循环ch=1bx=0000cf=1

(该轮循环结束后CH=0,不再循环)Lop0:cl=2Calladdit有:Al=2Adcal,0;al=3Aaa;al=3Cl=1cf=0重复有:Al=0Adcal,0;al=0Aaa;al=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论