2011-03-20 33 views
0

您好,我真的不知道這是怎麼工作的大會8086的程序,計算c =((22-7)/ 10)* 113

data segment 
db 22 
db 7 
db 5 
db 113 
data ends 
code segment 
assume cs:code,ds:data 
start:mov si,500H 
mov di,1500H 
mov ah,0 
mov al,22 
cbw 
sub ax,7 
mov cx,5 
idiv cx 
mov bx,113 
imul bx 
mov dl,ax 
mov [di],al 
code ends 
end start 

我真的不知道發生了什麼事在這個方案所以任何幫助,將不勝感激

+0

什麼是你想實現什麼?這是作業嗎? – 2011-03-20 11:45:57

+0

如果我是你,我會用Google找到一些關於彙編程序的體面教程。還有[開發人員手冊](http://www.intel.com/Assets/PDF/manual/253666.pdf)(例如來自英特爾)描述了每個裝配功能,如果您發現某些功能不明白(如'cbw')。 – 2011-03-20 11:47:11

+1

'mov cs,5'是非法的助記符。你想做'mov cx,5'嗎? – 2011-03-20 11:49:14

回答

1

通常,代碼看起來不正確。但無論如何,讓我們回顧一下主要部分:

data segment - 聲明將用於calc的3個字節的數據(但不幸的是根本沒有使用)。 db - 是字節的聲明(用DW比較 - d eclare W¯¯ ORD,...) code segment - 聲明程序代碼開始有

完全用於進行計算你只需要以下:

mov AX, 22; place number 22 to processor register AX 
sub AX, 7; now we have subtract 7 from AX and place it back to AX 
mov CX, 5; 5 is placed to CX register 
xor DX, DX; per comment of @GJ 
idiv cx ; divide AX/CX 
mov bx,113; BX now contains 113 
imul bx; at last mul result of AX on BX and place back to AX 
+0

非常感謝的人,但我仍然有一個問題 我可以選擇任何寄存器做這個或什麼? 例如,我可以使用bx來存儲22而不是斧頭,然後用ax來存儲113? – Max 2011-03-20 11:57:41

+0

@Max對於某些操作是的,您可以在BX中放置22或7。但是一些操作(div/idiv/mul/imul)只能用AX執行。但是你必須系統地學習這些問題,拿一些關於彙編語言的書(例如http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/toc.html) – Dewfy 2011-03-20 12:20:12

+0

幾乎正確的代碼... :)在'idiv'執行之前,您必須將'DX'寄存器設置爲0! – 2014-02-07 10:16:03

1

下面是一些有用的提示:

  • mov dst, src複製SRC到DEST
  • operand *dst*, src執行操作數在src和dest上並將結果複製到dest中。例如,sub ax, 7計算ax - 7並將結果放入ax
  • idiv src將ax乘以src,並將結果放入ax。 imul與乘法相同。

這應該足以讓你開始。

0

簡單:

mov word[c],((22-7)/5)*113