汇编语言-- 实验三 子程序应用(数制转换)程序设计
子程序应用(数制转换)程序设计
- 一、实验目的
- 二、实验内容
- 三、设计思想
- 四、程序代码
- (一)进制转换代码
- (二)最大值并输出
- (三)最长字符串
一、实验目的
1)掌握程序设计中的子程序结构;
2)熟练使用过程伪指令、子程序调用和返回等汇编语言的指令编写子程序;
3)掌握数制转换方法;
4)掌握利用DOS系统功能调用进行字符输入及字符输出(显示)的方法。
二、实验内容
1、编写十进制到十六进制转换程序。要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来
2、已知从BUF开始存放了10个16进制字数据,编程求出这10个数中的最大数,(将最大数存入MAX字节单元),并将其以10进制数的形式在屏幕上显示出来。
(提示:以上两题都要求采用子程序的方法)
3、从键盘上输入一行字符,如果这行字符比前一次输入的一行字符长度长,则保存该行字符,然后继续输入另一行字符;如果它比前一次输入的行短,则不保存这行字符。按下‘ ’ 输 入 结 束 , 最 后 将 最 长 的 一 行 字 符 显 示 出 来 。 ( 选 作 ) ( 提 示 : 定 义 数 据 段 , 包 括 两 个 变 量 S T R I N G 和 B U F F E R , 格 式 如 下 : S T R I N G D B 0 ; 存 放 字 符 的 个 数 D B 80 D U P ( ? ) , 0 D H , 0 A H , ‘ ’输入结束,最后将最长的一行字符显示出来。(选作) (提示:定义数据段,包括两个变量STRING和BUFFER,格式如下: STRING DB 0 ;存放字符的个数 DB 80 DUP (?), 0DH,0AH,‘ ’输入结束,最后将最长的一行字符显示出来。(选作)(提示:定义数据段,包括两个变量STRING和BUFFER,格式如下:STRINGDB0;存放字符的个数DB80DUP(?),0DH,0AH,‘’;存放前一次输入的字符串,兼作显示缓冲区
BUFFER DB 80 ;输入字符串的缓冲区,最多输入80个字符
DB ?
DB 80 DUP (20H)
然后利用0AH号DOS系统功能调用收入字符,用09H号系统功能调用输出。)
三、设计思想
1.先调用子程序READ由键盘输入一个数字后,先减去30H把ASCII码形 式转换为二进制形式,保存在BX中。再调用子程序BINHEX,转换为十六进制 形式显示BX中的数。
2.利用子程序 MAXIMUM依次比较,将BUF中10个字的最大值放到BX中,并 存入MAX字节单元中。然后调用子程序ORIGIN先输出十六进制表示的最大值, 再调用CONVERY子程序依次除以10000,1000,100,10,分别把余数放到BX, 商放到DL,将DL中的值转换为ASCII码格式,最后调用2号功能输出结果。
3.在子程序READ中调用0AH功能,将输入字符放到缓冲区,之后输入的字符 串与显示缓冲区STRING的内容相比较,若BUFFER中的内容多于STRING中的 内容,则被替换,输入$即停止输入字符串。最长的字符串保存在STRING缓冲 区中,最后在OUTPUT子程序中调用9号功能输出最长字符串。
四、程序代码
(一)进制转换代码
DSEG SEGMENTMSG1 DB 0DH,0AH,'Please input a number:','$'MSG2 DB 0DH,0AH,'Result:','$'MSG3 DB 0DH,0AH,'$'
DSEG ENDS
CSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEGSTART:PUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXCALL READ ;调用输入子程序CALL BINHEX ;调用转换输出子程序CALL CRLF ;换行RETMAIN ENDP
;--------------------------
READ PROC NEARMOV BX,0 ;BX初始化为0LEA DX,MSG1MOV AH,09HINT 21H ;输出提示字符串
INPUT:MOV AH,01HINT 21H ;输入字符CMP AL,0DH ;是否是回车键JZ EXIT ;是回车键就退出SUB AL,30H ;是否小于0JB EXITCMP AL,09H ;是否大于9JA EXITCBW ;扩展为字XCHG AX,BX ;AX和BX交换MOV CX,0AH MUL CX ;将前面的数×10XCHG BX,AX ;再次交换ADC BX,AX ;加上目前位置的数JMP INPUT ;再次输入
EXIT:RET
READ ENDP
;------------------------
BINHEX PROC NEARLEA DX,MSG2MOV AH,09HINT 21H ;输出提示字符串MOV CL,4 ;每次移位4位MOV CH,4 ;循环4次
CHANGE:ROL BX,CL ;循环左移4位MOV AX,BX AND AL,0FH ADD AL,30H ;转为ASCII码CMP AL,39H JBE OUTPUT ;小于等于9直接输出ADD AL,07H ;大于9再加07H
OUTPUT:MOV DL,ALMOV AH,02HINT 21H ;输出单个字符DEC CH ;循环计数-1JNZ CHANGE RET
BINHEX ENDP
;-------------------
CRLF PROC NEARLEA DX,MSG3MOV AH,09HINT 21HRET
CRLF ENDPCSEG ENDSEND START
(二)最大值并输出
DSEG SEGMENTBUF DW 05H,0FH,15H,1FH,9AH,25H,2AH,32H,3AH,3FHMAX DB ? MSG1 DB 0DH,0AH,'MAX(DEC):','$'MSG2 DB 0DH,0AH,'MAX(HEX):','$'
DSEG ENDS
CSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEGSTART:PUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXCALL MAXIMUM ;调用计算最大值子程序CALL ORIGIN ;调用输出原数据子程序CALL CONVERY ;调用输出十进制数据子程序RETMAIN ENDP;-----------------MAXIMUM PROC NEARMOV BX,0 ;偏移量MOV CX,9 ;循环比较9次MOV AX,BUF[BX] COMP:ADD BX,2 ;偏移量+2CMP AX,BUF[BX] ;比较两个数JA NEXT ;原数据更大则下一个MOV AX,BUF[BX] ;更换最大值NEXT:LOOP COMPMOV BX,AX MOV MAX,AL ;最大值存入MAX存储单元RETMAXIMUM ENDP;-------------------ORIGIN PROC NEARLEA DX,MSG2MOV AH,09HINT 21H ;输出提示字符串MOV BL,MAXMOV CL,4 ;移位4位MOV CH,2 ;循环2次REPEAT:ROL BL,CL ;循环左移4位MOV AL,BL AND AL,0FH ADD AL,30H ;转换ASCIICMP AL,39HJBE LAST ;不大于9则直接输出ADD AL,07H ;大于9再加07HLAST:MOV DL,ALMOV AH,02HINT 21H ;输出DEC CH ;计数-1JNZ REPEAT RETORIGIN ENDP;----------------
CONVERY PROC NEARLEA DX,MSG1MOV AH,09HINT 21H ;输出提示字符MOV CX,100d CALL DIVD ;调用DIVD子程序MOV CX,10dCALL DIVDMOV CX,1dCALL DIVDRET
CONVERY ENDP
;-----------------
DIVD PROC NEARMOV AX,BX MOV DX,0DIV CX ;除以CX的值MOV BX,DX ;余数存入BXMOV DL,AL ;商存入DLADD DL,30H ;转换为ASCIIMOV AH,02HINT 21H ;输出RET
DIVD ENDP
CSEG ENDSEND START
(三)最长字符串
DSEG SEGMENTSTRING DB 0 ;存放字符的个数DB 80 DUP (?), 0DH,0AH,'$' ;存放前一次输入的字符串,兼作显示缓冲区BUFFER DB 80 ;输入字符串的缓冲区,最多输入80个字符DB ?DB 80 DUP (20H)RESULT DB 0DH,0AH,'LONGEST STRING:','$'
DSEG ENDS
CSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEG,ES:DSEG
START:PUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXMOV ES,AXCALL READ ;调用输入子程序 CALL OUTPUT ;调用输出子程序RETMAIN ENDP;-----------------------
READ PROC NEAR
REPEAT:MOV AH,02HMOV DL,0DHINT 21H ;回车MOV AH,02HMOV DL,0AHINT 21H ;换行LEA DX,BUFFERMOV AH,0AHINT 21H ;键盘键入缓冲区MOV AL,BUFFER[2];取出第一个字符CMP AL,'$' ;与$比较JNZ COMP ;不是结束去比较JMP EXIT ;是就结束输出
COMP:MOV AL,BUFFER[1];取出实际字符数CMP AL,STRING[0];与最长字符数比较JB REPEAT ;比前一次短重新输入MOV STRING[0],AL;更长就更新最长字符数LEA SI,BUFFER[2]LEA DI,STRING[1]MOV CH,0MOV CL,BUFFER[1]CLDREP MOVSB ;输入的最长字符串存入STRINGJMP REPEAT ;再次输入
EXIT:RET
READ ENDP
;------------------------
OUTPUT PROC NEARLEA DX,RESULTMOV AH,09HINT 21H ;输出提示字符串LEA DX,STRING[1]MOV AH,09HINT 21H ;输出最长字符串RET
OUTPUT ENDP
;-------------------------CSEG ENDSEND START
汇编语言-- 实验三 子程序应用(数制转换)程序设计相关推荐
- [汇编语言]实验三:栈和栈段
实验三 实验内容: (1) (2) (3) (4) (5) (6)
- 20172305 2017-2018-2 《程序设计与数据结构》实验三报告
20172305 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 谭鑫 学号:20172305 实验教师:王志 ...
- 20172332 2017-2018-2 《程序设计与数据结构》实验三报告
20172332 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 于欣月 学号:20172332 实验教师:王 ...
- 20172324 2017-2018-2《程序设计与数据结构》实验三报告
20172324 2017-2018-2<程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...
- python面向对象实验报告_20192310 实验三《Python程序设计》实验报告
学号 2020-2021-1 <数据结构与面向对象程序设计>实验三报告 课程:<程序设计与数据结构> 班级: 1923 姓名: 严嘉钰 学号:20192310 实验教师:王志强 ...
- 20182326 2019-2020-1 《数据结构与面向对象程序设计》实验三报告
20182326 2019-2020-1 <数据结构与面向对象程序设计>实验三报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 刘颖洁 学号:20182326 实验 ...
- 利用c51进行数模转换并在液晶屏上显示_51单片机汇编语言实验(五)-----A/D 0809模数转换和DA0832数模转换实验(附参考代码及注释)...
本系列共6篇文章,本文作为本系列的第五篇文章,介绍实验五 :A/D 0809模数转换和DA0832数模转换实验,本系列文章基于Dais-52PRO实验箱. 本系列文章链接: ------------- ...
- zp2ss matlab,控制系统计算机仿真(matlab)实验三实验报告
实验三 控制系统数学模型及其转换 一.实验目的 1.掌握控制系统常用数学模型Matlab 表示 2.利用Matlab 实现数学模型之间的转换 二.实验学时:2学时 三.实验原理 1.已知传递函数模型: ...
- c语言实验指导书答案第三章,《C语言程序设计》实验指导书答案
printf(\ else printf(\ } system(\ } 4. #include #include #define pi 3.14 main( ) { float r; printf(\ ...
最新文章
- 澳大利亚悉尼科技大学招收人工智能/软件工程方向全奖博士生
- C# 操作redis
- 网页编程从入门到精通 杨凡_干货 | web前端入门基础知识
- WordPress七牛云镜像存储插件
- div不继承父类样式_Java三大特性之继承
- jquery点击按钮显示和隐藏div
- cvMat结构体详解
- 201503-1-图像旋转
- HTML 转 PDF的两种实现方式
- nssa和stub_ospf协议stub和nssa区域说明
- 为赢过老婆打造自动瞄准弓,闭眼也能百发百中,零件电路算法全自制
- 【Word文稿】在Word中优雅地插入VScode颜色主题代码(高亮、背景、颜色、字体均完美)
- 华硕路由器官改/梅林 设置外置USB-JFFS解救NAND
- windows server 2016 活动目录部署系列(十一)AD域控上安装证书服务器
- 【Google Chrome】如何让浏览器显示手机网页
- LeetCode-1694. 重新格式化电话号码【字符串,分块】
- s11 day103 luffy项目结算部分+认证+django-redis
- React State
- 使用Arthas快速定位SpringBoot接口超时问题的神器
- spring-rabbit的使用
热门文章
- 运动性能强的蓝牙耳机,四款运动蓝牙耳机
- SpringBoot 发布 WebService
- floyd算法-matlab
- JSON与JS之间的相互转换
- python 学习 制作英文学习字典 DAY23
- python手游脚本自动采集_Python脚本结合UiAutomator自动化采集Activity的FPS
- java 遍历request_java 遍历request中的所有表单数据的实例代码
- [GDOI模拟2015.08.12]囚人的旋律
- 百度人工智能篇,飞桨EasyDL零门槛AI开发平台1
- navicat for mysql命令行_详解 Navicat for MySQL 命令工具