基數轉換子程式

2021-07-30 01:12:42 字數 3045 閱讀 5657

基數轉換程式

將暫存器eax中的32位無符號二進位制數轉換為p進製數(p為 3-16 中任何乙個整數)

p進製的ascii碼按照高位在前,低位在後的順序存放在si指定的首址的位元組儲存區域

; 子程式名: radix 

; 功能: 將eax中的32位無符號二進位制數轉換為p進製數(16位段)

; 入口引數:

; eax 存放待轉換的32位無符號二進位制數

; ebx 存放要轉換的數值的基數

; si 存放轉換後的p進製ascii碼數字串的位元組緩衝位址

; 出口引數:

; 所求p進製的ascii碼數字串按照高位在前,低位在後的順序存放在si為指標的位元組緩衝區中

; si 所指向位元組緩衝區中最後乙個ascii碼的下乙個位元組處

; 暫存器:

; cx p進製數字入棧、出棧的計數器

; edx 做除法時存放被除數高位或餘數

radix proc

;保護現場

push cx

push edx

;計數器清零

xor cx, cx

lop1:

xor edx, edx ;edx清零

div ebx ; eax / ebx(p) 商在eax中,餘數在dx中

push dx ;餘數入棧

inc cx ;計數器加1

or eax, eax

jnz lop1 ;如果eax != 0迴圈 lop1

lop2:

pop ax ;從棧中取出乙個餘數

cmp al, 10

; al < 10 ?

jb l1 ;是 轉 l1

add al, 7

;越過數字字元與字母字元之間的間隔

l1:add ax, 30h;將數字轉換為數字字元

inc si

loop lop2

;恢復現場

pop edx

pop cx

ret

radix endp

.386

stack segment use16 stack

db 100 dup(0)

stack ends

data segment use16

d dd 123

buf db 20 dup(?)

mesg1 db "radix 16 is: ", 0ah, 0dh, '$'

data ends

code segment use16

assume cs:code, ds:data, ss:stack

; 子程式名: radix

; 功能: 將eax中的32位無符號二進位制數轉換為p進製數(16位段)

; 入口引數:

; eax 存放待轉換的32位無符號二進位制數

; ebx 存放要轉換的數值的基數

; si 存放轉換後的p進製ascii碼數字串的位元組緩衝位址

; 出口引數:

; 所求p進製的ascii碼數字串按照高位在前,低位在後的順序存放在si為指標的位元組緩衝區中

; si 所指向位元組緩衝區中最後乙個ascii碼的下乙個位元組處

; 暫存器:

; cx p進製數字入棧、出棧的計數器

; edx 做除法時存放被除數高位或餘數

radix proc

;保護現場

push cx

push edx

;計數器清零

xor cx, cx

lop1:

xor edx, edx ;edx清零

div ebx ; eax / ebx(p) 商在eax中,餘數在dx中

push dx ;餘數入棧

inc cx ;計數器加1

or eax, eax

jnz lop1 ;如果eax != 0迴圈 lop1

lop2:

pop ax ;從棧中取出乙個餘數

cmp al, 10

; al < 10 ?

jb l1 ;是 轉 l1

add al, 7

;越過數字字元與字母字元之間的間隔

l1:add al, 30h;將數字轉換為數字字元

mov [si], al

inc si

loop lop2

;恢復現場

pop edx

pop cx

ret

radix endp

;********************=主程式*************************

main:

mov ax, data

mov ds, ax

;將d轉換為16進製制, 並顯示在螢幕上

mov eax, d

mov ebx, 16

lea si, buf

call radix

mov buf[si], '$'

lea dx, buf

mov ah, 9

int 21h

exit:

mov ah, 4ch

int 21h

code ends

end main

#include 

#include

using

namespace

std;

int main() ;

int n, m;

cin >> n >> m;

stack

s;while(n)

while(!s.empty())

cout

<< endl;

return

0;}

使用彙編可以利用ascii表,字母表和數字表之間的間隔 7 直接轉換, 效率明顯比c++高多了,但是看**的時候,直觀性很差。

基於計數排序子程式的基數排序實現

include stdafx.h include include using namespace std define radix 3 define length 7 int a length copy a into b void copyarray int a,int b void printar...

子程式過載

子程式過載是指有一系列具有相同的子程式名稱,但有不同的型別和數目的引數的子程式,它們用於完成不同但相關的操作。在程式中呼叫某個過載的子程式時,編譯器將根據呼叫的子程式及其所使用的引數序列和數目來確定那個子程式將被執行。1.在編寫過載子程式時應注意各子程式的引數個數和引數型別的差異,否則編譯器將不能正...

wordcount例子程式

hadoop 0.20.1裡的wordcount源 與0.19.2已經有較大的區別了。在新版本的hadoop中,org.apache.hadoop.mapred包被org.apache.hadoop.mapreduce所取代。不過為了保持相容性,org.apache.hadoop.mapred還是存...