[英]Assembly Language using loop for a code
我有這段代碼,但是如何使用循環來實現呢。 基本上,它是一個將x數組中的第一個值添加到下一個值,將其保存到y中的第一個值,然后從x中獲取第二個值並將其添加到第三個值並將其存儲在第二個值中的代碼。 y,依此類推。 然后,它獲取x的最后一個值並將其添加到x的第一個值,並將其保存到y的最后一個值。
.data
x sword 10,20,30,-10,-20, -30
y sword 6 dup (?)
mov ax,x
add x+2,ax
mov y,ax
mov ax,x+2
add x+4,ax
mov y+2,ax
mov ax,x+4
add x+6,ax
mov y+4,ax
mov ax,x+6
add x+8,ax
mov y+6,ax
mov ax,x+8
add x+10,ax
mov y+8,ax
mov ax,x+10
add x,ax
mov y+10,ax
我假設這是家庭作業,所以沒有完整的答案。
首先,要讀取/寫入存儲位置,您需要使用[]。 [ax]是ax處的內存位置,依此類推。 同樣適用於數組:[x + 2]表示x的第二個元素(因為它們每個都是兩個字節)。
繼續。 您可以使用索引或運行中的指針完成對數組的循環。 讓我們考慮第一個。
因此,您需要運行一個從0到5的索引( i
)。對於每個值,您都需要為y [i]分配x[1] + x[i+1]
,最后一個除外。 您需要一個條件來照顧最后一個。
在Intel中,有兩個專門設計為索引的寄存器SI
和DI
。 您可以使用數組預乘來尋址數組-類似於[array+SI*2]
。
為了進行循環,您需要有條件的回跳:如果索引小於數組大小,請再次執行循環。
因此,在偽代碼中,故意使用變量名而不是寄存器:
i=0
Loop:
copy x[i] into y[i] (more than one command in assembly)
if i = array_size-1 then add x[0] to y[i] (conditional jump here)
else add x[i+1] to y[i]
increment i
if i = array_size then jump to loop
你能跟從嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.