汇编语言实验报告三
更新时间:2024-05-28 16:19:01 阅读量: 综合文库 文档下载
汇编语言实验报告
(实验三)
一. 实验目的
1. 掌握程序设计中的子程序结构;
2. 熟练使用过程伪指令、子程序调用和返回等汇编语言的指令编写子程序; 3. 掌握数制转换方法;
4. 掌握利用DOS系统功能调用进行字符输入及字符输出(显示)的方法。 二. 程序说明
1. 编写十进制到十六进制转换程序。要求从键盘取得一个十进制数,然后把该数
以十六进制形式在屏幕上显示出来
2. 已知从BUF开始存放了10个16进制字数据,编程求出这10个数中的最大数,
(将最大数存入MAX字节单元),并将其以10进制数的形式在屏幕上显示出来。
(提示:以上两题都要求采用子程序的方法)
3. 从键盘上输入一行字符,如果这行字符比前一次输入的一行字符长度长,则保
存该行字符,然后继续输入另一行字符;如果它比前一次输入的行短,则不保存这行字符。按下‘$’输入结束,最后将最长的一行字符显示出来。(选作)
(提示:定义数据段,包括两个变量STRING和BUFFER,格式如下:
STRING DB 0 ;存放字符的个数
DB 80 DUP (?), 0DH,0AH,‘$’
;存放前一次输入的字符串,兼作显示缓冲区
BUFFER DB 80 ;输入字符串的缓冲区,最多输入80个字符
DB ?
DB 80 DUP (20H)
然后利用0AH号DOS系统功能调用收入字符,用09H号系统功能调用输出。)
三. 设计思想
1.先调用子函数decibin由键盘输入一个数字后,先减去30h把ASCII码形式转换为十进制数形式,保存在bx中,再调用子函数binihex,用十六进制形式显示bx中的数。
2.利用子函数max依次比较,将buf中10个字的最大值放到bx中,再一次除以10000,1000,100,10,并分别把余数放到bx,商放到dl,并转换为ASCII码格式,即把十六进制转为10进制,最后调用2号功能输出结果即可。
3.调用0ah功能,将输入字符放到缓冲区,并把之后输入的字符串依次与缓冲区内容相比较,若小于缓冲区内容,则被替换,直到输入$即停止输入字符串为止,输出最终存放在string中的字符串的内容。
四. 程序代码
1.输入10进制转换为16进制输出
data segment
Str1 db 0DH,0AH,'Please input a number: ','$' Str2 db 0DH,0AH,'Trans:','$' data ends
decihex segment
assume cs:decihex,ds:data
main proc far push ds sub ax,ax push ax mov ax,data mov ds,ax repeat:
lea dx,Str1 mov ah,09 int 21h
call decibin
lea dx,Str2 mov ah,09 int 21h
call binihex
mov dl,0ah ;换行 mov ah,2 int 21h
jmp repeat main endp
decibin proc near mov bx,0
newchar:
mov ah,1 int 21h sub al,30h
jl exit cmp al,9d
jg exit cbw xchg ax,bx mov cx,10d mul cx
xchg ax,bx add bx,ax jmp newchar exit:
ret decibin endp
binihex proc near mov ch,4 rotate: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl printit add al,7h printit:
mov dl,al mov ah,2 int 21h dec ch jnz rotate ret binihex endp
decihex ends end main 2.
data segment buf dw 05h,0fh,15h,1fh,45h,25h,2ah,32h,3ah,3fh data ends
code segment assume cs:code,ds:data main proc far start: mov ax,data mov ds,ax call max call convey mov ax,4c00h int 21h
main endp
max proc near mov bx,0 mov cl,10 mov ax,buf[bx] repeat: add bx,2 cmp ax,buf[bx] jg greater mov ax,buf[bx] greater: loop repeat mov bx,ax ret max endp
convey proc near mov cx,10000d call divid mov cx,1000d call divid mov cx,100d call divid mov cx,10d call divid mov cx,1d call divid ret
convey endp
divid proc near mov ax,bx mov dx,0 div cx mov bx,dx mov dl,al add dl,30h mov ah,2 int 21h ret
divid endp
code ends end start 3.
data segment
STRING DB 0 ;存放字符的个数 DB 80 DUP (?), 0DH,0AH,'$' ;存放前一次输入的字符串,兼作显示缓冲区
BUFFER DB 82 ;输入字符串的缓冲区,最多输入80个字符 DB ? DB 80 DUP (?)
out db 0dh,0ah,'Longest string:','$' data ends
code segment assume cs:code,ds:data,es:data main proc far start: mov ax,data mov ds,ax mov es,ax repeat: mov ah,02h mov dl,0dh int 21h mov ah,02h mov dl,0ah int 21h
lea dx,buffer mov ah,0ah int 21h mov al,buffer[2] cmp al,'$' jnz compare jmp output
compare: mov al,buffer[1] cmp al,string[0] jl repeat mov string,al lea si,buffer[2] lea di,string[1] mov cl,buffer[1] sub ch,ch cld rep movsb jmp repeat
output: lea dx,out mov ah,09h int 21h lea dx,string[1] mov ah,09h int 21h mov ah,4ch int 21h
main endp
code ends end start
五. 结果分析 1.
2.
3.
正在阅读:
汇编语言实验报告三05-28
东北大学精密仪器弹簧压力表课程设计说明书03-19
2018标准旅游招标书03-15
一步一步教你如何组织网站线下活动05-31
岩体力学习题集%2C答案03-09
中国医科大15春 - (大学英语2)答案03-16
二建法规记忆图口诀10-09
数据库期末复习题12-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 汇编语言
- 实验
- 报告