微机实验九数码转换_第1页
微机实验九数码转换_第2页
微机实验九数码转换_第3页
微机实验九数码转换_第4页
微机实验九数码转换_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、微机实验九数码转换实验目的1.掌握计算机常用数据编码之间的相互转换方法。2.进一步熟悉debug软件的使用方法一、实验内容1.acsii码转换为非压缩型bcd码编写并调试正确的汇编语言源程序,使之实现: 设从键盘输入一串十进制数,存入 data1单元中,按回车停止键盘输入。将其转换成非压缩性(非组合型)bcd码后,再存入data2开始的单元中。若输入的不是十进制数,则相应单元中存放ffh 。调试程序,用d 命令检查执行结果。实验代码:1.data segment ;定义数据段data1 db 21,21 dup() ; 建立一个内存区,第二个数存放最大字符数data2 db 21 dup()

2、;data2区定义data endsstack segment stack ;定义堆栈段db 100 dup()stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,data ;程序初始化mov ds,ax ;程序初始化lea dx,data1 ;dx 存放 data1的首地址mov ah,0ah ;从键盘中输入字符串int 21h ;调用 int21 功能lea si,data1 ;si 存放 data1的首地址inc si ;指向 lp1循环次数mov cl,si ;存放 lp1的循环次数mov ch,0inc

3、si ;指向所输入的数lea di,data2 ;di 存放 data2的首地址lp1: mov al,si ;将输入的数存放到al中cmp al,30h ;al 与 30h 比较jc lp2 ;al39h,则跳 lp2(jg与 ja比较 )sub al,30h ;将输入的字符转换成ascii码mov bl,al ;alblsave: mov di,bl ;blds:diinc si ;si=si+1inc di ;di=di+1loop lp1 ;循环 lp1jmp exit ;跳转到 exitlp2: mov bl,0ffh ;如果输入的不是十进制数,则在相应的单元中存放ffhjmp sa

4、ve ;跳转到 saveexit:mov ah,4chint 21hcode endsend start2.bcd码转换为二进制码编写并调试正确的汇编语言源程序,使之将一个16 位存储单元中存放的4 位 bcd 码data1 ,转换成 2 进制后存入data2字单元中。调试程序,用d 命令检查执行结果。代码:stack segmentdb 256 dup()stack endsdata segmentdata1 dw 1234hdata2 dw data endscode segmentassume ss:stack,cs:code,ds:datastart:mov ax,datamov ds

5、,axxor bx,bx ;累加单元清0(bx=0)mov si,0ah ;设置乘数 10mov cl,4mov ch,3 ;设置循环次数3mov ax,data1 ;取十进制数lp: rol ax,cl ;取数字mov di,ax ;保存当前ax 值and ax,0fh ;屏蔽高位add ax,bx ;累加mul simov bx,axmov ax,didec ch ;循环次数减1jnz lprol ax,cl ;取个位数字and ax,0fh ;屏蔽高位add ax,bx ;累加mov data2,axmov ah,4chint 21hcode endsend start3.十六进制数转换

6、为acsii码编写并调试正确的汇编语言源程序,使之将内存data1字单元中存放的4 位十六进制数,转换为ascii码后分别存入data2为起始地址的4 个单元中,低位数存在低地址的字节中,并在屏幕上显示出。代码:stack segmentdb 256 dup()stack endsdata segmentdata1 db 12h,02ch ;4 位十六进制数data2 db 5 dup() ; 存放 asc码data3 db 4 dup() ;4 位十六进制数分别存放在data3的 4 个字节中lfcr db 0dh,0ah,$data endscode segmentassume ss:st

7、ack,ds:data,cs:codestart:mov ax,datamov ds,axlea si,data1lea di,data3mov cl,2 ;循环 2 次lp1: mov al,si ;取 2 位十六进制数and al,0f0h ; 屏蔽低四位ror al,4 ; 右移 4 位mov di,al ;高位数存放在高地址字节中inc dimov al,si ;取 2 位十六进制数and al,0fh ; 屏蔽高四位mov di,al ;低位数存放在低地址字节中inc siinc didec cljnz lp1lea si,data3 ; 将 data3的首地址偏移量赋给silea

8、di,data2 ; 将 data2的首地址偏移量赋给dimov cl,4 ;循环 4 次lp2: mov al,si ;取 data3中的十六进制数cmp al,9jg lp3 ; 若 al9,跳转到 lp3add al,30h ;十六进制数0-9-asc码,要加30hjmp lp4lp3: add al,37h ; 十六进制数a-f-asc码,要加37hlp4: mov di,al ;将 asc码依次存入data2中inc diinc sidec cljnz lp2mov al,$ ;设置显示结束标志mov di+1,al ;存入 data2中lea dx,lfcrmov ah,09hin

9、t 21h ;回车换行mov dx,offset data2mov ah,09hint 21h ;显示 asc码mov ah,4chint 21hcode endsend start二、实验步骤1.编辑源文件,经汇编连接产生exe文件。2.用 debug调试、检查、修改程序。3.三、实验习题与思考1.编程实现:从键盘上输入两位十六进制数,转换成十进制数后显示在屏幕上。源代码:stack segment db 256 dup() stack ends data segment data1 db 5,2 dup() data2 db 2 dup() data3 db 2 dup() data en

10、ds code segment assume ss:stack,ds:data,cs:code start:mov ax,data mov ds,ax lea dx,data1 mov ah,0ah int 21h ;输入字符串lea si,data1+2 lea di,data2 mov cl,2 ;将 asc码转换为十六进制数lp1: mov al,si sub al,30h cmp al,9 ja lp2 mov di,al inc di inc si dec cl jz lp3 jnz lp1 lp2: sub al,7 mov di,al inc di inc si dec cl j

11、nz lp1 ;将十六进制数转换成十进制数,并保存lp3: lea di,data2 mov al,di mov bl,di+1 mov cl,4 shl al,cl add al,bl mov di,al lea si,data3 xor ah,ah mov cl,100 div cl ;ah=ax%100,al=ax/100 mov si,al ;保存百位数mov al,ah xor ah,ah mov cl,10 div cl mov si+1,al ;保存十位数mov si+2,ah ;保存个位数;屏幕显示十进制数lp4: mov dl,si ;取百位数送显or dl,30h mov

12、ah,02h int 21h mov dl,si+1 ;取十位数送显or dl,30h mov ah,02h int 21h mov dl,si+2 ;取个位数送显or dl,30h mov ah,02h int 21h mov ah,4ch int 21h code ends end start 运行图:输入:输出:2.十进制数转换为七段码。为了在七段显示器上显示十进制数,需要把十进制数转换为七段代码。转换可采用查表法。设需要转换的十进制数已存放在起始地址为data1区域中,七段代码转换表存放在起始地址为 table表中,转换结果存放到起始地址为data2区域。若待转换的数不是十进制数,则相

13、应结果单元内容为00h。源代码:stack segment db 256 dup() stack ends data segment data1 db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,a,b,c,$ table db 00h,40h,01h,79h,02h,24h,03h,30h,04h,19h,05h,12h,06h,02h, 07h,78h,08h,00h,09h,18h,0ah,08h,0bh,03h,0ch,46h,0dh,21h, 0eh,06h,0fh,0eh ;实际数据定义必须在同一行data2 db 16 dup(0) count equ 2 data ends code segment assume ss:stack,ds:data,cs:code start:mov ax,data mov ds,ax lea si,data1 lea bx,data2 lea di,table xor ah,ah lp1: mov al,si ;外循环 data1指向下一个inc si mov cx,16 ;内循环 table 16次lp2: cmp di,al je lp3 add di,count ;内循环 table指向下一组

温馨提示

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

评论

0/150

提交评论