汇编程序 十六进制数转换成ASCII码

汇编程序 十六进制数转换成ASCII码,第1张

举个例子,6CH,转换成ASCII码,是以十六进制形式显示:6CH,还是以十进制形式显示:108?

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

; -----------------------------------------

; 功能:显示指定地址(Str_Addr)的字符串

; 入口:

; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr

; 用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

; -----------------------------------------

; 功能:把AL中的二进制无符号数转换成显式的十进制ASCII

; 入口:AL=二进制数;di=转换后的ASCII保存地址

; 出口:无

HEXASC_Dec Proc Near

push si

push cx

push bx

push di

mov bl,10

xor cx,cx

lea di,@@Temp_Save[3]

cld

@@Divide: xor ah,ah

div bl

or ah,30h

mov [di],ah

dec di

inc cx

test al,0ffh

jnz @@Divide

push di

pop si

inc si

pop di

pop bx

rep movsb

pop cx

pop si

ret

@@Temp_Save db 4 dup()

HEXASC_Dec EndP

; -----------------------------------------

; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码

; 入口:AL

; 出口:AL=转换后的ASCII码

AL_ASCII Proc Near

cmp al,10 ;AL<10

jb @@To_ASCII ;AL<10,按数字处理

add al,7 ;AL>=10,按大写字母处理

@@To_ASCII: add al,'0' ;转换成相应的数字或大写字母

ret

AL_ASCII EndP

; -----------------------------------------

; 功能:将AL中的字节数转换成十六进制显示的ASCII码

; 入口:AL

; 出口:AX=转换后的ASCII码

HEXASC_Hex Proc Near

push cx

mov cx,4

xor ah,ah ;将AH置0

shl ax,cl ;将AX左移4位

shr al,cl ;将AL右移4位

xchg ah,al

call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码

xchg ah,al

call AL_ASCII

xchg ah,al

pop cx

ret

HEXASC_Hex EndP

; -----------------------------------------

Translate db '0' ;转换方式(默认:十进制数显示;若要十六进制显示,则改为:1)

BUF db 23,35,46,57,68,79,81,98,119,243

Elements EQU ($-BUF)/Type BUF ;元素个数

Start: push cs

pop ds

push cs

pop es ;使数据段、附加段与代码段同段

cld

lea si,BUF

lea di,Temp_STr

mov cx,Elements

HEX_ASCII: lodsb

IF Translate == '0'

call HEXASC_Dec

ELSE

call HEXASC_Hex

stosw

mov al,'H'

stosb

ENDIF

mov al,','

stosb

loop HEX_ASCII

dec di

mov al,'$'

stosb

Output Temp_STr

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Temp_STr:

Code ENDS

END Start ;编译到此结束

; -----------------------------------------

ADD AL,90H

DAA

ADD AL,40H

DAA

十进制数加调整指令DAA(Decimal Adjust After Addition)

该指令是用于调整AL的值,该值是由指令ADD或ADC运算二个压缩型BCD码所得到的结果。压缩型BCD码是一个字节存放二个BCD码,低四位和高四位都是一个BCD码。

其调整规则如下:

如果AL的低四位大于9,或标志位AF=1,那么,AL=AL+6,并置AF=1;

如果AL的高四位大于9,或CF=1,那么,AL=AL+60H,并置CF=1;

、如果以上两点都不成立,则,清除标志位AF和CF。

经过调整后,AL的值仍是压缩型BCD码,即:二个压缩型BCD码相加,并进行调整后,得到的结果还是压缩型BCD码。

这个程序是正确的。

程序循环了16次。

把 M_byte,L_byte,左移了16次,最高位,依次移进了Cy;

用 ADDC 指令,把 RW1,RW2,左移了16次,并把Cy,加入到了最低位。

ADDC 指令后面,是十进制调整指令,所以,RW1,RW2 中的内容就是BCD码。

char buf[12];

int a = 0;

memset(buf, 0, sizeof(buf));

sprintf(buf, "%x", 0x1234);

a = atoi(buf);

这样就把0x1234 变成了1234

可以参考下面的程序,其中bitCount!=8 && bitCount!=24指的就是8位与24位

//BMP与IplImage相互转换

///////////////////////////////头文件bmp2iplh

//bmp2iplh

#ifndef BMP2IPL_H

#define BMP2IPL_H

class BMP {

public:

BMP():bmpData(NULL) {

memset(&biHeader, 0, sizeof(biHeader));

}

BMP(const BMP & img);

BMP(const IplImage &img);

BMP(int width, int height, int bitCount);

~BMP(){ delete [] bmpData; }

bool CreateImage(const BITMAPINFOHEADER &biHeader);

//Export

IplImage BMP2Ipl();

//void Show(HWND hWnd, int nID);

//void Show(CDC pDC, CRect & rect);

//void Show(HWND hWnd);

void ReSize(int newW, int newH);

private:

void CopyData(char dest, const char src, int dataByteSize,

bool isConvert, int height);

// ,

以上就是关于汇编程序 十六进制数转换成ASCII码全部的内容,包括:汇编程序 十六进制数转换成ASCII码、51单片机用汇编把16进制转化为10进制,这个程序不是很懂,希望高手能详细解释下、在单片机中十六进制0x1234转化成十进制格式的1234有什么方法,有现成的C程序也可以。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10117710.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存