华工微机系统与接口实验(二) 您所在的位置:网站首页 ascii码转16进制汇编程序 华工微机系统与接口实验(二)

华工微机系统与接口实验(二)

2023-11-13 05:54| 来源: 网络整理| 查看: 265

实验二 数码转码编程及程序调试

1.将ASCII码表示的十进制数转换为二进制数 十进制数可表示为: 在这里插入图片描述 在这里插入图片描述代表十进制1,2,3,···9,0; 在这里插入图片描述 在这里插入图片描述

由式(2)可归纳十进制数转换为二进制数的方法:从十进制的最高位Dn开始作乘10加次位的操作,将结果再乘10再加下一个次位,如此重复,则可求出二进制的数结果来。程序流程图如图2-2。这里我们规定:被转换的ASCII码十进制数存放在3500h~3504h单位中。而转换结果在3510~3511单位中。

实验步骤 (1)输入程序并检查无误。 (2)在3500~3504h单元存入十进制12的ASCII码,即e3500,并输入3030303132。 (3)g=2000,运行程序,并用CTR+C来中断程序返回监控态。 (4)用d3510查看结果,应为3510 0C 00 (5)反复试几组数,考查程序的正确性。 (6)参考流程图如图2-2 在这里插入图片描述

CODES SEGMENT ASSUME CS:CODES START: MOV AX,0 MOV BX,0 MOV CX,4 MOV DL,10 MOV SI,3500H MOV BL,[SI] SUB BL,30H MOV AL,BL S:MUL DL INC SI MOV BL,[SI] SUB BL,30H ADD AX,BX LOOP S MOV DI,3510H MOV [DI],AX MOV AH,4CH INT 21H CODES ENDS END START

在这里插入图片描述

2.将从键盘输入的五位十进制数的ASCII码已存在3500起始的内存单元中。把它转换成BCD码后,再按位分别存入350A起始的内存单元内。若输入的不是十进制的ASCII码,则显示FF. 程序流程图如图2-3

实验步骤 (1)输入程序并检查无误。 (2)在3500~3504H单元存入五位十进制数的ASCII码,即e3500 并输入31,32,33,34,35。 (3)G=2000,运行以上程序。 (4)D350A,显示结果为:0000:350A 01 02 03 04 CC… (5)反复试几组数,考查程序的正确性。 (6)参考流程图如下 在这里插入图片描述

DATAS SEGMENT ORG 3500H SOURCE DB 5 DUP(?) ORG 3510H RESULT DB 5 DUP(?) ORG 3520H COUNT EQU 5 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV CX, COUNT MOV SI, OFFSET SOURCE MOV DI, OFFSET RESULT ;SI,DI都是指针,分别指向初始值和结果 NEXT: MOV DL, 0FFH ;16进制以字母开头加上0 MOV AL, [SI] ;取SI中的内容保存到AL CMP AL, 39H ;与9比较(ASCII 39H就是十进制的9) JG NEXT1 ;有符号大于则跳转 SUB AL, 30H ;取低四位 CMP AL, 0 ;与0比较 JL NEXT1 ;有符号小于则跳转 MOV [DI], AL ;将AL的值赋给[DI]所值的内容 INC DI INC SI DEC CX CMP CX, 0 JNZ NEXT ;不为零则跳转 JE EXIT NEXT1: MOV [DI],DL ;如果不是十进制的ASCII则直接赋0FFH给[DI]所指单元 INC DI INC SI DEC CX CMP CX,0 JNZ NEXT JE EXIT EXIT: MOV AH,4CH INT 21H CODES ENDS END START

先执行2次 t ,即 MOV AX,DATAS MOV DS,AX 在这里插入图片描述 3.将十六位二进制数转换为ASCII码表示的十进制数。 十六进制数的值域为0~65535,最大可转换为五位十进制数。 实验步骤 (1)输入程序并检查无误。 (2)在3500~3501H单元中存放0C00,运行程序并检查结果,应看到3510~3514H单元中的数依次为3030303132。 (3)参考流程图见图2-4 在这里插入图片描述

DATAS SEGMENT ORG 3500H ;ORG直接设置偏移地址 SOURCE DW 000CH ;键盘输入是记得先输入地位0C再输入高位OO ORG 3510H RESULT DB 5 DUP(?) ORG 3520H COUNT EQU 5 ORG 3530H DIVNUM DW 10 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX, SOURCE MOV CL, COUNT MOV BX, 4 NEXT: MOV DX, 0 DIV DIVNUM ;AX中的OC H/10 = 1...2,余数保存到DX ADD DX, 30H MOV RESULT[BX], DL ;第一次循环,将32H放到3514,第二次将31H放到3513... DEC BX DEC CL JNZ NEXT ;当CL=00时停止 MOV AH,4CH INT 21H CODES ENDS END START

在这里插入图片描述 4.十六进制数转换为ASCII码 设经过CPU处理后的十六进制存放在起始地址为3500H的内存中,把它们转换成ASCII码之后,再分别存入起始地址为3510的内存单元中。参考流程图如图2-5所示。 实验步骤 (1)输入程序并检查无误。 (2)在3500~3501H单元中存入四位16进制数203B,即:e3500,并输入3B,20。 (3)G=2000,运行程序 (4)D350A,显示结果为: 0000:350A 42 33 30 32 CC` 输入数与结果ASCII码对应顺序相反。 (5)参考流程图如下 在这里插入图片描述

DATAS SEGMENT ORG 3500H SOURCE DW 203BH ORG 3510H RESULT DB 4 DUP(0) DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV DX,SOURCE MOV DI, OFFSET RESULT MOV CL, 4 NEXT: MOV AX, DX AND AX, 0FH ;只保留最低位 CMP AX, 9 JG NEXT2 ;如果大于9,则需+ 7H,(ASCII 37H),否则就+30H ADD AX, 30H MOV [DI], AL ;将结果保存到DI指针所指地址 INC DI ;指针指向下一个地址 SHR DX, CL ;右移四位,即去掉最低位,原来的次低位变成最低位,直到DX=0 CMP DX, 0 ;如果DX=0就结束了 JE EXIT JNE NEXT NEXT2: ADD AX, 37H MOV [DI], AL INC DI SHR DX, CL CMP DX, 0 JE EXIT JNE NEXT EXIT: MOV AH,4CH INT 21H CODES ENDS END START

**5.**BCD码转换为二进制码 设四个二位十进制的BCD码存放在起始地址为3500H的单元中,转换出的二进制数码存入起始为3510的内存单元中,程序流程图如图2-6。 实验步骤 (1)输入程序并检查无误 (2)在3500~3501H单元中存入四个十进制数(12,34,56,78)的BCD码,即e3500,输入01.02.03.04.05.06.07.08。 (3)G=2000,运行程序 (4)D3510,显示结果为3510 0C 00 22 00 38 00 4E 00 (5)参考流程图见图2-6 在这里插入图片描述

DATAS SEGMENT ORG 3500H SOURCE DB 01H, 02H, 03H, 04H, 05H, 06, 07H, 08H ORG 3510H RESULT DW 4 DUP(0) DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV BL, 0AH MOV CX, 4 MOV DI, OFFSET SOURCE ;指向输入数据的指针 MOV SI, OFFSET RESULT ;指向结果的指针 NEXT: MOV AL, [DI] ;将指针所指内容赋给AL MUL BL ;AL乘10保存到BL INC DI ;指向下个数据 MOV AH, 0 ;没有用到高四位,赋0 ADD AL, [DI] MOV [SI], AX INC SI INC SI ;+2,比如从3510->3512,一个数据为一个字(16位) INC DI ;指向下一个数据 DEC CX CMP CX, 0 JNZ NEXT MOV AH,4CH INT 21H CODES ENDS END START

在这里插入图片描述

哎微机太难了硬件太难了! 代码也不会敲! 记录一下,下不为例!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有