求汇编语言源代码(10进制数转16进制数)急求急求!!!!
\u572851\u5355\u7247\u673a\u4e2d\uff0c\u4f7f\u7528\u6c47\u7f16\u8bed\u8a00\uff0c\u5982\u4f55\u5c06\u5341\u516d\u8fdb\u5236\u6570\u8f6c\u6362\u6210\u5341\u8fdb\u5236\u3002\u7a0b\u5e8f\u7ecf\u8fc7\u4eff\u771f\u8c03\u8bd5\u901a\u8fc7\uff0c\u5982\u4e0b\u6240\u793a:
MOV R0, TL0
MOV R1, TH0
CLR A
MOV R2, A, ;\u5148\u6e05\u96f6
MOV R3, A,
MOV R4, A,
MOV R5, #16 ;\u5171\u8f6c\u6362\u5341\u516d\u4f4d\u6570
LOOP:
CLR C
MOV A, R0 ;\u4ece\u5f85\u8f6c\u6362\u6570\u7684\u9ad8\u7aef\u79fb\u51fa\u4e00\u4f4d\u5230Cy
RLC A
MOV R0, A
MOV A, R1
RLC A
MOV R1, A
MOV A, R4 ;\u9001\u5230BCD\u7801\u7684\u4f4e\u7aef
ADDC A, R4 ;\u5e26\u8fdb\u4f4d\u52a0\u3002\u81ea\u8eab\u76f8\u52a0\uff0c\u76f8\u5f53\u4e8e\u5de6\u79fb\u4e00\u4f4d
DA A ;\u5341\u8fdb\u5236\u8c03\u6574\uff0c\u53d8\u6210BCD\u7801
MOV R4, A
MOV A, R3
ADDC A, R3
DA A
MOV R3, A
MOV A, R2
ADDC A, R2
MOV R2, A
DJNZ R5, LOOP ;\u5171\u8f6c\u6362\u5341\u516d\u4f4d\u6570
;-------\u81f3\u6b64\uff0c\u5df2\u7ecf\u628aTH1 TL1\u4e2d\u7684\u6570\u5b57\uff0c\u8f6c\u6362\u6210BCD\u7801\uff0c\u9001\u5230\u4e86R2 R3 R4\u3002
;-------\u4e0b\u9762\uff0c\u5206\u522b\u5b58\u5165R4 R3 R2 R1 R0\u3002
MOV A, R4
MOV B, #16
DIV AB
MOV R1, A
MOV R0, B
MOV A, R2
MOV R4, A
MOV A, R3
MOV B, #16
DIV AB
MOV R3, A
MOV R2, B
RET
;\u5b8c
\u4ee5\u7b2c\u4e00\u884c\u4e3a\u4f8b\uff0c0000\u662fROM\u7684\u5730\u5740\uff0c906000\u662f\u4f60\u7684\u6c47\u7f16\u7a0b\u5e8f\u7684\u5b9e\u9645\u673a\u5668\u7801\uff0c
\u7b2c\u4e8c\u884c\uff0c0003\u8fd8\u662fROM\u5730\u5740\uff08\u56e0\u4e3a\u4e0a\u4e00\u884c\u4e2d\u673a\u5668\u7801\u67093\u4e2a\u5b57\u8282\uff0c90 60 00\uff09\uff0c7800\u662f\u7b2c\u4e8c\u884c\u6c47\u7f16\u7684\u673a\u5668\u7801\u3002
\u4f9d\u6b64\u7c7b\u63a8\uff0c\u6bcf\u884c\u90fd\u662fROM\u5730\u5740\uff0b\u673a\u5668\u7801
str db 0ah,0dh
num db 4 dup(?),'H$'
tab db '0123456789ABCDEF'
data ends
code segment
assume cs:code,ds:data
begin: mov ax,data
mov ds,ax ;初始化代码段
xor bx,bx
mov cx,10 ;进制
next: mov ah,1
int 21h
cmp al,0dh
jz conv ;如果是回车,表示输入结束,转换开始
push ax ;保存输入值,当然还有AH,因为堆栈的存取必须以字为单位
mov ax,bx
mul cx
mov bx,ax ;将先前的结果向上推一位
pop ax ;取回本次输入
and al,0fh ;屏蔽掉无用位,类SUB AL,30H
xor ah,ah ;高位归零
add bx,ax ;合并本次输入
jmp next
conv: mov ax,bx ;开始转换
mov ch,4
lea bx,tab ;没有见这个直接定址表起什么用啊!!!
mov cl,4
lea si,num
lopa: rol ax,cl ;把高4位移到低4位
push ax
and ax,000fh ;取出低4位
mov [si],al ;按地址由低到高的顺序将结果由高到底存放
inc si
pop ax
dec ch
jnz lopa
lea dx,str
mov ah,9
int 21h ;回车换行
mov ah,4ch
int 21h
code ends
end begin
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;算法描述:
;总体来说是以二进制为中介,
;先将输入视为十进制,转换为二进制数保存在BX中
;然后再将这个二进制数转换为十六进制数保存在num开始的单元中
;十进制转换为二进制的过程:
;初始化:假设第一次输入前的输入为0
;对于每次输入,将前面输入的各位均提升一位,即百位变千位,十位变百位,个位变十位,然后当前的输入填到个位,重复该步操作直到遇到回车符
;二进制转换为十六进制:
;因为每4个二进制位可以由1个十六进制位表示,所以依次取出4个二进制位就可以
;①每次循环移动4位,将高4位移动到低4位后,取出低4位
;②将取出的数依次写入num开始的单元中
;③重复①-②4次
;输出时:(这段代码没有,所以我说,没有见直接定址表起什么用)
;从num开始以字节为单位取数
;以得到的数字为偏移量,查表tab,得到对应的十六进制字符,输出,重复4次
10进制数转16进制数,程序如下:
……
;--------------------------------
MOV x, 0 ;16进制数据清零.
_INX:
MOV AH, 1 ;输入字符.
INT 21H
;--------------------------------
CMP AL, 13 ;回车?
JE _IN_END ;是则结束输入.
CMP AL, '0'
JB IN_LOOP ;小于'0',不是数字.
CMP AL, '9'
JA IN_LOOP ;大于'9',不是数字.
SUB AL, '0'
MOV CL, AL
MOV CH, 0
MOV AX, x
MOV BX, 10 ;老数据乘以10
MUL BX
ADD AX, CX ;加上新数据.
MOV x, AX ;保存.
CMP AX, 2000
JA IN_LOOP
JMP _INX
;--------------------------------
_IN_END:
……
……
;--------------
楼主留言说:不对,不对。
呵呵,这一段程序,确实是“10进制转换成16进制”的代码。
不知道楼主怎么就看出不对了?
转换成16进制后,你可以利用它,进行你自己的运算,再算错了,那就是你的不对。
;--------------
看楼主在前面的留言说:执行结果不对。
有点奇怪,你是怎么执行?
你要的,就是一小段代码,怎么可能执行?
你如果要可执行的,就先说清楚,你要怎么执行。
;--------------
10进制数据,键盘输入;
16进制数据,屏幕显示;
这算是一种执行的方式。
可以参考:
http://zhidao.baidu.com/question/429756654.html
#include <iostream>
using namespace std;
int a[100];int b[100] ;
void func(int x)//x此处是10进制数,转化成十六进制
{
int i=0; //i 为一个局部变量,在func函数中有用
while(x!=0)
{
a[i]=x%16;
x/=16;
i++;
}
for(int k=i-1;k>=0;k--)
{
cout<<a[k];
}
cout<<endl;
}
void func2(int y)
{
int i=0; // i 为一个局部变量在func2中有用
while(y!=0)
{
a[i]=y%8;
y/=8;
i++;
}
for(int k=i-1;k>=0;k--)
{
cout<<b[k];
}
cout<<endl;
}
void main()
{
int n;
cout<<"输入10进制数:"<<endl;
cin>>n;
cout<<"转化成十六进制:"<<endl;
cout<<"转化成八进制:"<<endl;
func(n);
func2(n)
绛旓細mov al,10 mul bl add al,NUMBER+3 sub al,30h mov bl,al jp0:mov ah,2 mov cx,8 jp1:shl bl,1 mov dl,'1'jc out1 dec dl out1:int 21h loop jp1 mov ah,1 ;鎸変换鎰忛敭閫鍑 int 21h mov ax, 4c00h int 21h MAIN ENDP CSEG ENDS END MAIN 0~99閮芥湁鏁 娆㈣繋杩介棶 姹傛弧...
绛旓細mov cl,10 mul cl add dx,ax jmp mL2 mL3: add dx,ax push dx print HEX pop bx push bx MOV CH,4 ;浠庤繖閲屽紑濮嬪皢4浣嶄簩杩涘埗鏁拌浆鎴16杩涘埗ASCII鐮 mH1: MOV CL,4 ROL BX,CL ;灏咮X涓殑鏁板惊鐜乏绉4浣,涔熷氨鏄妸BX鏈楂4浣,鏀惧埌BX鐨勬渶浣4浣嶄笂鍘汇侻OV AL,BL ;灏嗕綆8...
绛旓細0ah int 10h call printBin mov ah,4ch int 21h;read input decimal number;store in bxreadn proc near mov bx,0 mov cx,10 mov si,0r0: mov ah,7 int 21h cmp al,0dh jz r3 cmp al,'0' jb r0 cmp al,'9' ja r0 mov ah,0eh int 10h and al...
绛旓細鍏跺疄鐩稿綋浜嶣CD鐮杞崲涓篐EX鐮併侭CD2HEX:MOV A,30H ANL A,#0FH XCH A,40H XCH A,30H SWAP A ANL A,#0FH MOV B,#10 MUL AB ADD A,40H MOV 40H,A MOV A,31H ANL A,#0FH MOV R4,A XCH A,31H SWAP A ANL A,#0FH MOV B,#10 MUL AB ADD A,R4 MOV R7,#100 MOV R3,#0 ...
绛旓細鍥涗綅鍗佽繘鍒舵暟杞崲涓轰簩杩涘埗鏁扮▼搴忥細锛涘叆鍙e弬鏁癛7銆丷6锛孯7涓洪珮瀛楄妭锛孯6涓轰綆瀛楄妭銆傝繃绋嬩腑鐢ㄥ埌瀵勫瓨鍣ˋ銆丅 BCDTOBIN: MOV A,R7 LCALL BCDTOBIN1 MOV B,#100 MUL AB MOV R7,B MOV B,R6 XCH A,B MOV R6,B LCALL BCDTOBIN1 ADD A,R6 MOV R6,A CLR A...
绛旓細缁欎綘涓涓瓙绋嬪簭锛屽凡缁忔祴璇曡繃銆傚姛鑳芥槸灏咥X涓殑鏁版嵁杞垚鍗佽繘鍒ASCII鐮侊紝娉ㄦ剰锛屽叆鍙I瑕佹寚鍚戠紦鍐插尯鐨勫熬閮 TEN2ASC PROC NEAR ;ent ax=data si=end of buffer ;exit si=start of string PUSH AX PUSH CX PUSH DX MOV BYTE PTR [SI],'$' ;鏀剧粨鏉熺 MOV CX,10 SUB_L1...
绛旓細姝e父杈撳嚭鍟 include io32.inc .data msg byte '鍗佽繘鍒舵暟65535鐨勪簩杩涘埗鏁颁负锛',0 .code start:mov eax,offset msg call dispmsg mov eax,3 push eax mov eax,65535 again:mov ebx,2 mov edx,0 div ebx mov ecx,eax mov eax,edx push eax mov eax,ecx cmp eax,0 jg again tz:pop ...
绛旓細妤间富缁欏嚭鐨勭▼搴忥紝鏄垜鍐欑殑銆鍗佽繘鍒鍙樻崲鎴愪簩杩涘埗锛屾瘮杩欎釜绋嬪簭瑕佺畝鍗曘傚彧瑕佸垎鍒箻浠10銆100銆1000...锛屽啀鐩稿姞灏辫浜嗭紝骞舵病鏈変粈涔堟妧宸х殑銆
绛旓細MOV AH, 10 ;绛夌潃杈撳叆鍥涗綅鏁 INT 21H ;--- ;涓嬮潰杩涜杞崲 MOV BIN, 0 ;鍏堟妸浜杩涘埗鏁板瓧鍗曞厓娓呴浂 LEA SI, HEX + 2;鍙栬緭鍏ュ瓧绗︿覆鐨勯鍦板潃 MOV CH, NNN ;鍙栬緭鍏ュ瓧绗︾殑涓暟锛岀敤鏉ユ帶鍒跺惊鐜鐞嗙殑娆℃暟 CONV:MOV BL, [SI] ;鍙栨潵涓涓瓧绗 CMP BL, 0DH ;鍜屽洖杞...
绛旓細姹囩紪璇█锛岀洿鎺ヤ娇鐢10杩涘埗銆16杩涘埗銆2杩涘埗锛岄兘琛岀殑銆傜幇鍦ㄧ粰鍑轰簡鍗佽繘鍒舵暟锛屽ぇ姒傛槸瑕佹眰杞崲鎴16杩涘埗銆傞偅涔堬紝杞崲濡備笅锛47 = 2FH 2724 = 0AA4H 绋嬪簭濡備笅锛;灏47浣滀负涓涓崟瀛楄妭鏃犵鍙锋暟瀛樻斁鍦ㄥ瘎瀛樺櫒30H锛孧OV 30H, #2FH ;灏2724浣滀负涓涓弻瀛楄妭鏁版斁鍦31H锛堥珮瀛楄妭锛夊拰32H锛堜綆瀛楄妭锛変腑銆侻OV 31H,...