最近因為有個大作業要寫計算器,故考慮重寫除零中斷給予提示
data segment
buffer1 db 20
dup(?)
b1n db 0
buffer2 db 20
dup(?)
b2n db 0
formula db 30
db ?
char db 30
dup(
'$')
db '$'
welcome db 'start to enter the formula:'
,0ah,
0dh,
'$'warn db 'you are tring to divide 0!'
,0ah,
0dh,
'$'data ends
stack segment stack
s db 256
dup(?)
stack ends
;換行回車巨集
hhhc macro
mov ah,
2 mov dl,
0dh int 21h
mov ah,
2 mov dl,
0ah int 21h
endm
code segment
assume cs:code,ds:data,es:data,ss:stack
;重寫除0中斷***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
*int0 proc far
push dx
push ax
mov dx,offset warn
mov ah,
09hint 21h
pop ax
pop dx
mov ah,
4chint 21h
iret
int0 endp;*
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**start:
mov ax,
0mov es,ax
mov di,
0mov ax,offset int0
cld
stosw
mov ax,seg int0
stosw
;將程式位址寫入中斷向量表;*
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***mov ax,data
mov ds,ax
mov es,ax
mov dx,offset welcome
mov ah,
09hint 21h
mov dx,offset formula ;將輸入的式子放入formula中,以char的offset為首位址
mov ah,
0ahint 21h
;各個運算子的ascii碼 '('
-28h,
')'-
29h,
'*'-
2ah,
'+'-
2bh,
'-'-
2d,'/'
2fhmov dx,offset char;輸出剛才輸入的計算式
mov ah,
09hint 21h
hhhc
;除零之後出現bug
;call int0
;除零測試:先放著最後再測試
GCC中的內嵌組合語言
一.宣告 雖然linux的核心 大部分是用c語言編寫的,但是不可避免的其中還是有一部分是用組合語言寫成的。有些組合語言 是直接寫在彙編源程式中的,特別是linux的啟動 部分 還有一些則是利用gcc的內嵌組合語言嵌在c語言程式中的。這篇文章簡單介紹了gcc中的內嵌式組合語言,主要想幫助那些才開始閱讀...
組合語言 向視訊記憶體中傳入字元
程式設計序,在螢幕的中間分別顯示綠色 綠底紅色 白底藍色的字串 yantaiuniversity assume cs codeseg,ds datasg datasg segment db yantaiuniversity datasg ends codeseg segment start mov ...
組合語言PTR運算子 重寫運算元的大小型別
ptr 運算子可以用來重寫乙個已經被宣告過的運算元的大小型別。只要試圖用不同於彙編器設定的大小屬性來訪問運算元,那麼這個運算子就是必需的。例如,假設想要將乙個雙字變數 mydouble 的低 16 位傳送給 axo 由於運算元大小不匹配,因此,彙編器不會允許這種操作 data mydouble dw...