第二次实验二 汇编语言程序设计

更新时间:2024-03-05 08:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《微机实验及课程设计》

实验报告

实验二 汇编语言程序设计

姓 名: 学 号: 专 业: 测控技术与仪器 实 验 室: 516 评定成绩: 审阅教师:

一、实验目的

1、近一步熟悉汇编语言的编辑、宏汇编、链接和运行的基本概念

2、熟练掌握动态调试程序TD/DEBUG的常用指令和窗口功能,学会用TD/DEBUG调试程序,修改数据和寄存器环境

3、熟悉掌握汇编语言程序的典型数据结构设计、典型程序控制方法,了解DOS/BIOS功能调用的基本方法 二、实验内容(必做)

2-1、从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其它字符不变),并按原顺序将这些字符在屏幕上显示出来(参考程序P36),并显示字符串“The total number is XXXXX”。 2-2、从键盘输入一个0~255之间的十进制数,将其转换为16进制数,并在屏幕上显示变换前后的数据(参考程序P38)。

实验内容(选做)

2-3、在内存中定义5个十六进制带符号数(范围为-128~+127),请将它们按从大到小排序,并将排序前后的数据显示在屏幕上。

三、实验源程序(主要部分)和流程图 2-1、将字符串中小写字母转换为大写字母

data segment

input db 100,100 dup(0)

str1 db 0dh,0ah,'please input string',0dh,0ah,'$' str2 db 0dh,0ah,'The final result:',0dh,0ah,'$' str3 db 0dh,0ah,'The total number is:',0dh,0ah,'$' data ends ;定义数据段

sta segment

db 256 dup(0)

sta ends ;定义堆栈段

code segment

assume cs:code,ds:data,ss:sta start:

mov ax,data mov ds,ax mov ax,sta

mov ss,ax ;初始化各段基址 lea dx,str1 mov ah,09h

int 21h ;显示提示字符串1 lea dx,input

mov ah,0ah

int 21h ;输入要转化的字符串 lea dx,str2 mov ah,09h int 21h

xor cx,cx ;将cx清零

mov cl,input[1] ;由于直接将input[1](即实际字符个数)复制给cx会 ;出现操作数宽度不匹配的错误

mov si,2 l1:mov dl,input[si]

cmp dl,61h ;判断该字符是否为小写字母 jb l2

cmp dl,7ah ja l2

sub dl,20h ;若是,则减20h l2:mov ah,2 ;显示该字符 int 21h

inc si

loop l1 ;继续判断,直到cx=0,即所有字符转化完毕 lea dx,str3 mov ah,09h

int 21h ;显示字符串3 mov dl,input[1]

add dl,30h ;将输入字符个数转换为ASCⅡ码 mov ah,02h

int 21h ;显示出字符个数 mov ah,4ch

int 21h ;程序返回 code ends end start

2-2.十进制数转换为16进制数

data segment right db 1

input db 4,5 dup (0) output db 00h ten db 0ah

string1 db 0dh,0ah,'please input your number(0~255)',0dh,0ah,'$' string2 db 0dh,0ah,'the number you input is(00H~FFH)',0dh,0ah,'$' string3 db 0dh,0ah,'The number you put is(in H):',0dh,0ah,'$' string4 db 0dh,0ah,'The number you put is(in D):',0dh,0ah,'$' data ends

stacks segment db 256 dup(0) stacks ends

code segment

assume cs:code,ds:data,ss:stacks main proc far start:

mov ax,data mov ds,ax

mov ax,stacks

mov ss,ax ; mov output,00H ; mov dx,offset string1 mov ah,09h int 21h

mov dx,offset input ; mov ah,0ah int 21h mov right,1

call change ;

cmp right,0 ; jz error

mov dx,offset string4 mov ah,09h int 21h

mov cl,input[1] mov si,2 loop1: mov dl,input[si] mov ah,02h int 21h inc si

loop loop1 ;

mov dx,offset string3 mov ah,09h int 21h

mov dl,output

初始化各段基址 清零 输入数值 调用转换子程序 判断数值是否满足条件 显示输入的十进制数字 push dx mov cl,4 shr dl,cl call disp pop dx

and dl,0fh call disp jmp go

error:mov dx,offset string2 mov ah,09h int 21h

go:mov ah,4ch int 21h main endp

change proc near ;数值转换子程序 clc ;进位标志清零 xor ax,ax ;寄存器清零 xor bx,bx xor dx,dx

mov cl,input[1] ;将数值位数赋值给cl mov si,2 ;初始化si

again:mov bl,input[si] ;依次将每位数字赋给bl

cmp bl,30h ;判断是否为0~9,不是right置0 jb error1 cmp bl,39h ja error1 sub bl,30h dec cl cmp cl,0 jz over mov ax,1

push cx ;保留此时的cx

loop2:mul ten ;计算位数乘值(1,10,100?) loop loop2 pop cx mul bx

add word ptr[output],ax ;将值累加,且有强制类型转换

jc error ;若进位位为1,说明输入数字超出规定范围 inc si jmp again

本文来源:https://www.bwwdw.com/article/fdoa.html

Top