;*********************************************************************
; 函数功能:转化指令长度的内存区块为ASCII,转储到目标内存块,目标
; 内存块长度应该是源内存块的2倍,如果内存块的内容均为压
; 缩BCD码,则函数恰好将其转化为ASCII码。
; 入口参数:参数3:目标内存块地址,参数2:源内存块地址,参数1:源
; 内存块大小
; 参数大小:均为2个字节,参数顺序,自右向左
; 注意: 要在16位代码段中使用本函数,子过程已经通过了作者的初步
; 测试,欢迎大家测试并使用。
;*********************************************************************
MEM_TO_HEX PROC FAR
PUSH BP
MOV BP,SP
MOV DI,[BP+06H] ;提取目标内存块地址
MOV SI,[BP+08H] ;提取源内存块地址
MOV CX,[BP+0AH] ;提取源内存块长度(单位:字节)
LCX:
MOV AL, BYTE PTR [SI]
MOV BH, AL ;保存AL的高半字节
MOV BL, 2H
LBL:
AND AL, 0FH ;将AL低半字节转化成十六进制
CMP AL, 09H
JA A
OR AL,30H ;转化数字(0~9)成ASCII
JMP B
A: OR AL,31H ;转化字母(A~F)成ASCII
B: MOV BYTE PTR [DI],AL;存入目标内存区
INC DI ;目标内存指针加1
MOV AL,BH ;恢复AL的高半字节
SHR AL,4H
DEC BL ;循环计数器减1
JNZ LBL
INC SI ;源内存指针加1
LOOP LCX
POP BP
RET 6H
MEM_TO_HEX ENDP
;*********************************************************************; 函数功能:转化指令长度的内存区块为ASCII,转储到目标内存块,目标; 内存块长度应该是源内存块的2倍,如果内存块的内容均为压; 缩BCD码,则函数
十六
进
制
转十
进
制
和
BCD
算法(汇编)是应wahllfok的要求上传的,wahllfok原本需要
BCD
转十六
进
制
的算法,我最近有点忙只有这个逆算法(几年前写的),希望能给你借鉴。有时间我再写一个。
这个算法分两个子程序,一个是将十六
进
制
转十
进
制
(
压缩
BCD
),一个是
BCD
解
压缩
算法。连起来即可。
//
BCD
码 转 十
进
制
#define
BCD
_TO_DECIMAL(x) ((((x) & 0xf0) >> 4) * 10 + ((x) & 0x0f))
// 十
进
制
转
BCD
码
#define DECIMAL_TO_
BCD
(x) ((((x) / 10) << 4) + ((x) % 10))
* \brief 十六
进
制
转
bcd
用于把时
16位的数字高字节和低字节Problem: To show masking of lower and higher nibbles of 8-bit number using 8086 Microprocessor.
问题:使用8086微处理器显示8位低半字节和高半字节的屏蔽。
Assumption:
Number is stored at memory location 0600...
//
BCD
转换成16
进
制
数(例如:0x16转换成16)---读时钟使用(例如:读的秒=26代表:0x26,为
BCD
码,需要转换成十
进
制
:38)
uint8_t
BCD
toHEX(uint8_t
BCD
)
uint8_t tempData;
tempData = ...
文章目录前言一、简单操作指令 CLR、CPL、SWAPCLR ACPL ASWAP A二、位移指令 RL、RR、RLC、RRCRL ARR ARLC ARRC A三、逻辑“与”指令 ANLANL A, XXXANL direct, XXX四、逻辑“或”指令 ORLORL A, XXXORL direct, XXX五、逻辑“异或”指令 XRLORL A, XXXXRL direct, XXX
前言...
1、
BCD
码的种类
BCD
码可分为有权码和无权码两类:有权
BCD
码有8421码、2421码、5421码,其
中
8421码是最常用的;无权
BCD
码有余3码、格雷码等。
1. 8421
BCD
码
8421
BCD
码是最基本和最常用的
BCD
码,它和四位自然二
进
制
码相似,各位的权值为8、4、2、1,故称为有权
BCD
码。和四位自然二
进
制
码不同的是,它只选用了四位二
进
制
码
中
前10组代码,即用00
在做嵌入式软件的设计
中
,经常会遇到十六
进
制
、
BCD
码与十
进
制
之间的转换,最近做M1卡的应用
中
,涉及了大量的十六
进
制
、
BCD
码与十
进
制
之间的转换。笔者通过对
BCD
码、十六
进
制
权的理解,轻松的实现了他们之间的互换。
#include
#include
/////////////////////////////////////////////////////
//功能:二
进
制
取
MOV AL, 63 ; 将十
进
制
数63
存入
AL寄存器
DAA ; 将AL
中
的数值转换为
压缩
BCD
码,并存回AL
AAM ; 将AL
中
的数值
存入
AH和AL
中
,AH为高位
BCD
码,AL为低位
BCD
码
2. 使用AAA指令:
MOV AL, 63 ; 将十
进
制
数63
存入
AL寄存器
AAA ; 将AL
中
的数值转换为
压缩
BCD
码,并存回AL
AAM ; 将AL
中
的数值
存入
AH和AL
中
,AH为高位
BCD
码,AL为低位
BCD
码
这两种方式都可以将十
进
制
数63以
压缩
BCD
码的
形式
送到AX
中
。