組合語言重寫除零中斷

2021-10-05 05:34:10 字數 2507 閱讀 8261

最近因為有個大作業要寫計算器,故考慮重寫除零中斷給予提示

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...