2015-02-10 72 views
-3

我剛開始學習如何用匯編語言編寫程序。我遇到了一些編寫基本SORT算法的方法,但他們有我不知道/不支持使用的命令。如何用匯編語言編寫基本的SORT程序?

我需要編寫一個程序,將一系列數字從最小到最大排序。

到目前爲止,我的思考過程是,如果累加器是正數,那麼我會添加索引1的索引0和2的補碼,然後將索引0存儲到其他位置,將索引1存儲在索引0處,然後獲取索引0以前存儲在別處,並將其放在索引1處。增加索引,直到執行了更多操作。所以基本上我認爲是一種冒泡。

我的問題是我真的不明白是怎麼內存地址,索引和這樣的工作。我也沒有學到很多不同的ASC指令。我認爲我們已經學習了基本的16,正如我的老師所說的那樣。

所以,我想,是什麼冒泡排序的彙編語言中最基本的形式?

爲了清楚起見,這裏是我應該回答的2個問題。我想,如果我能做到這一點,我可以做第一個。

  1. 位置#H50包含指向整數表中第一個條目的地址。該表也在內存中,第一個條目是表中的條目數,不包括其本身。將最大和最小值的整數分別存儲在記憶位置MAX和MIN處。

  2. SORT幅度漸增順序在n個條目的表中的條目。

此外,#H50意味着ORG 50正確嗎?

+1

你正在使用哪種芯片組(即哪種彙編語言)? #是直接的(即一個絕對數字),H是十六進制(有時是$),50是十六進制數字50. ORG是一個宏,告訴彙編器在哪裏放置下面的代碼,在你的例子中(可能)*十進制* 50. – Mike 2015-02-10 06:35:44

+2

我們不爲您編寫代碼。詢問你不瞭解的內容。 – 2015-02-10 06:36:05

+0

我猜我不明白,並試圖更好地掌握索引和內存地址是如何工作的。這個任務是解釋的上下文。 – Ryuksaple 2015-02-10 06:42:20

回答

0

沒有CPU細節,我只能給出一個通用答案。

某些寄存器可以用作索引。註冊名稱和(在較小程度上)語法因系統而異。例如,如果x寄存器是索引寄存器,並且每個數字都是單個字節:

load x, NUM_OF_INTEGERS ; *size of integer if your addressing mode doesn't compensate 
number_loop: 
load r1, H50,x ; Read byte at 50+x into r1 
cmp r1, H50-1,x ; Compare with previous value 
bcs bigger  ; carry set - greater than previous one 
    ; Swap H50,x with H50-1,x 
    push r1   ; save onto stack (or use a different register if you have one available) 
    load r1, H50-1,x; get previous value 
    store r1, H50,x ; save it in current position 
    pop r1   ; restore it from stack 
    store r1, H50-1,x ; save it in earlier position 
    ; probably want to take note that you've done this somewhere so that you know to do another pass 
bigger: 
dec x   ; subtract 1 from index (or 2 or 4 if multi-byte numbers and addressing in your CPU doesn't compensate) 
bne number_loop ; if index not zero, do it again on the next numbers 

希望這會有所幫助。