本來兩個數相加,用c語言寫的話。
#includeint main()
到了彙編,第一次寫的時候,連個最簡單的都想了半天。
datas segment 定義資料段標識為「datas」
op1 db 09h 定義op1 為 byte型別 值為09h
op2 db 08h 定義op2 為 byte型別 值為08h
defult db ? 定義defult 為 byte型別 值為待定
carry db ? 定義carry 為 byte型別 值為待定
datas ends 資料段結束
stacks segment 堆疊段開始
stacks ends 堆疊段結束
codes segment 定義**段標識為「codes」
assume cs:codes,ds:datas,ss:stacks 設定資料段和**段的預設暫存器
start: 起始標誌
mov ax,datas
mov ds,ax 將datas賦值給ds
mov al,op1 將op1賦值給al
add al,op2
aaa 非壓縮bcd碼加法調整
jc ss2 如果進製 跳轉到ss2
jmp ss3 跳轉ss3
jnc ss1 不進製 跳轉ss2
jmp ss3 跳轉ss3
ss1: mov carry,30h 條件要求,給carry加上30h
ss2: mov carry,31h 條件要求,給carry加上31h
ss3:mov defult,al
add defult,30h;
mov dl,carry 將carry賦值給dl
mov ah,2
int 21h 在控制台上輸出字串
mov dl,defult 將default賦值給dl
mov ah,2
int 21h 在控制台上輸出字串
mov ah,4ch 正常結束程式
int 21h
codes ends
end start start結束
注釋是在中文前面加分號。沒想到,乙個進製,也要判斷,乙個的輸出也是那麼的麻煩,不過,原理性的東西就在這裡,語言原來讓程式設計美好了許多。不然你寫個加法都這樣,讓你做個計算器出來還了得。
彙編一位數加法
源於朱耀庭老師的 組合語言程式設計 清華大學出版社 大體思路 把結果看成兩位十進位制,add之後把結果除以10,商儲存到al,餘數儲存到ah,有進製結果顯示正常,沒有進製則高位顯示零,低位顯示結果 在32位win7下masm5編譯通過 mov dl,2號功能呼叫顯示問號 mov ah,02h int...
1062 最左邊一位數
最左邊一位數 time limit 1000ms memory limit 65536k total submit 112 accepted 24 description 對於給定的正整數n,輸出n n的最左邊一位數。input 輸入包含多組測試資料。輸入的第一行是乙個整數t,代表測試組數。隨後輸入...
一位陣列的應用 查詢
1.順序查詢 當被查詢的資料無序排列時,只能採用順序查詢法進行查詢。順序查詢演算法的思想是 對待查資料x一一與被查資料 陣列元素 進行比較,直到找到與待查資料相等的資料並返回陣列元素的下標 如果找不到,則返回 1.例1 順序查詢 include main int num,i 0 printf ple...