汇编语言怎么实现各种码制的转换

技术汇编语言怎么实现各种码制的转换本篇内容主要讲解“汇编语言怎么实现各种码制的转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“汇编语言怎么实现各种码制的转换”吧!1.十六进

本文主要讲解“如何用汇编语言实现各种代码系统的转换”。感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“如何用汇编语言实现各种代码系统的转换”!

1.十六进制转换为二进制数设计

1.1设计要求:

设计一个转换程序,将键盘键入的四位十六进制数据转换成等价的二进制数,显示在终端上。要求:改进程序结构,设置程序错误退出。输入的值不是0-F,并显示一条错误消息,要求重新输入。

00-1010依次输入四个十六进制数,依次存储在BX,最后在BX以二进制一位一位的形式输出结果。

汇编语言怎么实现各种码制的转换

1.2设计思路:

DATASEGMENT

pkeyDB ' pleasinput 4 hex(0 ~ F): $ '

ekeyDB0dh,0ah,“这是错误的!”,0dh,0ah,'请输入4十六进制(0~F)再输入: ',' $ '

huicheDB0dh,0ah,' resultis: ',0dh,0ah,' $ '

nummDB5dup(0)

数据结束

CODESEGMENT

ASSUMECS:CODE,DS:DATA

状态:

数据移动

MOVDS,AX

MOVCX,4;输入4个周期的十六进制数。

LEASI,numm打开索引寄存器SI

pkey

MOVAH,9岁

INT21HDOS函数调用,输出字符串

lp:MOVAH,1

INT21HDOS函数调用,输入4个十六进制数

CMPAL,“9”

JAabow9

CMPAL,“0”

JBeero

SUBAL,30h当输入值为0~9时,ASCII码存储为负30H。

jm扑通

eero:LEADX,ekey当输入不在0~9,不在A~F时,会显示错误。

MOVAH,9岁

INT21H

sp; JMP lp
abow9:CMP AL,'A'
      JNB abowa
      JMP eero
       
abowa:CMP AL,'F'
      JA eero
      SUB AL,37h    ;输入为A~F时ASCII码减37H存放
      JMP lop 
    
lop: MOV [SI],AL
    ROL BX,4
    ADD BX,[SI]    ;将输入的数据存入BX寄存器中
    INC SI
    DEC CX 
    JNZ lp
    MOV CX,16      ;输出二进制数循环16次
    LEA DX,huiche
MOV AH,9     
INT 21H        ;DOS功能调用,输出字符串
lp1: ROL BX,1        ;左移1位后显示的是最高位
    MOV DL,BL
    AND DL,01H     ;屏蔽DL高7位
    ADD DL,30H     ;加30H对应ASCII码
    MOV AH,2
    INT 21H        ;DOS功能调用,将内容按位输出
    DEC CX 
    JNZ lp1
          
CODE ENDS
END STATE

1.4程序运行结果及分析:

存放和输出时会遇到一些小问题,本程序通过移位和加法指令实现存放,比较麻烦但可以实现,后面的程序有所改进。

汇编语言怎么实现各种码制的转换

图1 十六进制转换为二进制数设计结果

2.十六进制转换为十进制数设计

2.1设计要求:

设计转换程序,将键盘输入的一位十六进制数转换为等值的十进制数,并在终端显示。设计要求:完善程序结构,设置程序错误出口。输出的不是0-F间的数字,显示错误提示信息,并要求重新输入。

2.2设计思路:

输入一位十六进制数,判断是否为0~9,a~f,A~F,各自转换后输出。

汇编语言怎么实现各种码制的转换

2.3程序清单:

DATA SEGMENT
     pkey  DB  0dh,0ah,"pleas input 1 hex(0~F):$"
     huiche DB  0dh,0ah,'result is:$'
     end2  DB  0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$'
     numm   DB  3 dup(0) 
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA 
     
STATE:  
    MOV AX,DATA
    MOV DS,AX
    LEA SI,numm     ;开辟缓冲区
    LEA DX,pkey
    MOV AH,9
    INT 21H         ;DOS功能调用,输出字符串
    
LP: MOV AH, 1
    INT 21H         ;DOS功能调用,输入1个十六进制数
    CMP AL,'9'
    JA abow9 
    CMP AL,'0'
    JB eero           ;输入小于0重新输入
    ADD AH,2FH     ;输入为0~9高位给0输出
    JMP OUTPUT
    
abow9: CMP AL,'A'
       JNB abowA
       JMP eero      ;输入大于9小于A重新输入
       
abowA:CMP AL,'F'
      JA abowF
      SUB AL,11H      
      ADD AH,30H   ;输入A~F高位给1,低位减11H输出
      JMP OUTPUT
abowF:CMP AL,'a'
      JNB abow1a
      JMP eero       ;输入大于F小于a重新输入
abow1a:CMP AL,'f'
      JA eero         ;输入大于f重新输入
      SUB AL,31H
      ADD AH,30H    ;输入a~f高位给1,低位减31H输出
     JMP OUTPUT
eero:LEA DX,end2
     MOV AH,9
     INT 21H         ;DOS功能调用,输出错误字符串 
     JMP LP
           
OUTPUT:
     MOV BX,AX
     LEA DX,huiche
     MOV AH,9
     INT 21H         ;DOS功能调用,输出字符串
     MOV [SI],BH 
     MOV DL,[SI]
     MOV AH,2
     INT 21H        ;DOS功能调用,高位输出
     MOV [SI],BL 
     MOV DL,[SI]
     MOV AH,2
     INT 21H        ;DOS功能调用,低位输出 
     JMP STATE
            
CODE ENDS
END STATE

2.4程序运行结果及分析:

这里输出分高位和低位输出,因为是一位十六进制数的转换,如果换两位或更多就需要将程序修改到更智能化。

汇编语言怎么实现各种码制的转换

图2 十六进制转换为十进制数设计结果

3.十六进制转换为ASCII码

3.1设计要求:

设计转换程序,将键盘键入的十六进制数据转换为对应的ASCII码,并在终端显示。

3.2设计思路:

将输入数的高位左移转ASCII输出,低位转ASCII输出。

汇编语言怎么实现各种码制的转换

3.3程序清单:

DATA SEGMENT
     pkey  DB  0dh,0ah,"please input 1 hex(0~F):$"
     huiche DB  0dh,0ah,'result is:$'
     end2  DB  0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$'
     numm  DB  3 dup(0) 
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA 
     
STATE:  
    MOV AX,DATA
    MOV DS,AX
    LEA SI,numm     ;开辟缓冲区
    LEA DX,pkey
    MOV AH,9
    INT 21H         ;DOS功能调用,输出字符串
    
LP: MOV AH, 1
    INT 21H         ;DOS功能调用,输入1个十六进制数
    CMP AL,'9'
    JA abow9 
    CMP AL,'0'
    JB end1          ;输入小于0重新输入
    JMP OUTPUT
    
abow9: CMP AL,'A'
       JNB abowA
       JMP end1       ;输入大于9小于A重新输入
       
abowA:CMP AL,'F'
      JA end1         ;输入大于F重新输入
      JMP OUTPUT
      
end1:LEA DX,end2
     MOV AH,9
     INT 21H         ;DOS功能调用,输出错误字符串
     JMP LP
      
OUTPUT:
     MOV BX,AX
     ROL BX,4
     AND BH,0FH
     ADD BH,30H      ;高位是AX左移四位再加30H得到
     AND AL,0FH
     MOV BL,AL
     ADD BL,30H      ;低位是AL低四位加30H得到
     LEA DX,huiche
     MOV AH,9
     INT 21H          ;DOS功能调用,输出字符串  
     MOV [SI],BH 
     MOV DL,[SI]
     MOV AH,2
     INT 21H          ;DOS功能调用,高位输出 
     MOV [SI],BL 
     MOV DL,[SI]
     MOV AH,2
     INT 21H          ;DOS功能调用,低位输出
     JMP STATE 
CODE ENDS
END STATE

3.4程序运行结果及分析:

汇编语言怎么实现各种码制的转换

图3 十六进制转换为ASCII码设计结果

4.英文字母大小写转换设计

4.1设计要求:

英文字母大小写转换本质上是ASCII码直接的转换。要求掌握大小写字母在计算机内的表示方法及转换方法。设计程序,连续将键盘输入的小写字母转换为大写字母,并在终端显示。设计要求:小写字母转换为大写字母输出,非字母或大写字母输入,不做处理直接输出。

4.2设计思路:

判断输入是否为a~z,是的话减20H输出,不是直接输出。

汇编语言怎么实现各种码制的转换

4.3程序清单:

DATA SEGMENT
     pkey   DB  0dh,0ah,"pleas input:$"
     result DB  0dh,0ah,'result is:','$' 
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA 
     
STATE:  
    MOV AX,DATA
    MOV DS,AX       ;初始化数据段
    
LP: LEA DX,pkey
    MOV AH,9
    INT 21H         ;DOS功能调用,输出字符串
    MOV AH, 1
    INT 21H         ;DOS功能调用,键盘输入
    CMP AL,'z'
    JA LLP  
    CMP AL,'a'       ;输入不在a~z之间直接输出
    JB LLP
    SUB AL,20H      ;输入为a~z转换,ASCII码减20H          
    MOV BL,AL
           
OUTPUT:
     LEA DX,result
     MOV AH,9
     INT 21H         ;DOS功能调用,输出字符串
     MOV DL,BL
     MOV AH,2
     INT 21H         ;DOS功能调用,输出DL中内容
     JMP LP                          
     
LLP: MOV BL,AL
     JMP OUTPUT    
            
CODE ENDS
END STATE

4.4程序运行结果及分析:

汇编语言怎么实现各种码制的转换

图4 英文字母大小写转换设计结果

到此,相信大家对“汇编语言怎么实现各种码制的转换”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/123881.html

(0)

相关推荐

  • jsf编程简单方法(jsf入门)

    技术怎样分析JSF的中文问题怎样分析JSF的中文问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。开始学习JSF的时候有遇上中文问题,看了一

    攻略 2021年12月14日
  • aabb形式,aabb形式有哪些词语

    技术aabb形式,aabb形式有哪些词语安安稳稳aabb形式、巴巴急、巴巴劫劫、巴巴结结、彬彬济济 半半拉拉、半半路路、炳炳烺烺、波波碌碌、病病歪歪 白白朱朱、啛啛喳喳、抽抽搭搭、吹吹打打、出出律律 楚楚谡谡、抽抽噎噎、

    生活 2021年10月26日
  • C++ std::function的简单实现以及函数指针

    技术C++ std::function的简单实现以及函数指针 C++ std::function的简单实现以及函数指针敢在简历里写“精通C++”或“熟练掌握C++”的人,都已经被面试官问死了……
    今天闲

    礼包 2021年10月27日
  • css怎么将背景图居中

    技术css怎么将背景图居中这篇文章主要介绍css怎么将背景图居中,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! css中,可利用“background-position

    攻略 2021年12月9日
  • 臀大肌锻炼方法,臀部肌肉缕缩要做什么锻炼

    技术臀大肌锻炼方法,臀部肌肉缕缩要做什么锻炼臀大肌位于臀部臀大肌锻炼方法,被认为是人体最强壮的肌肉之一。它连接到尾骨或尾骨,以及其他周围的骨骼。臀大肌负责臀部和大腿的运动。下面是五种非常有效的锻炼臀部肌肉的方法,希望对您

    生活 2021年10月24日
  • 0094-leetcode算法实现之二叉树中序遍历-binary-tree-inorder-traversal-pythongolang实现

    技术0094-leetcode算法实现之二叉树中序遍历-binary-tree-inorder-traversal-pythongolang实现 0094-leetcode算法实现之二叉树中序遍历-bi

    礼包 2021年11月12日