匯編:使用表驅(qū)動(dòng)選擇進(jìn)行四則運(yùn)算

include Irvine32.inc ; 引入作者的匯編頭文件

.data
CaseTable BYTE '+';查詢(xún)值
          DWORD Process_A;過(guò)程地址
EntrySize = ($-CaseTable)
          BYTE '-'
          DWORD Process_B
          BYTE '*'
          DWORD Process_C
          BYTE '/'
          DWORD Process_D
NumberOfEntries = ($-CaseTable)/EntrySize
number1 BYTE ?
number2 BYTE ?;保存輸入的兩個(gè)整數(shù)
input1 BYTE "Press input a integer :",0
input2 BYTE "Press input another integer :",0
prompt BYTE "Press capital +,-,*,or /: ",0
result BYTE "The result is :",0
.code
main PROC
    mov edx,OFFSET input1
    call WriteString
    call ReadInt;輸入第一個(gè)數(shù)字
    mov number1,al
    mov edx,OFFSET input2
    call WriteString
    call ReadInt;輸入第二個(gè)數(shù)字
    mov number2,al
    mov edx,OFFSET prompt
    call WriteString
    call ReadChar;輸入操作符
    call WriteChar
    call Crlf
    mov ebx,OFFSET CaseTable;設(shè)置ebx為表指針
    mov ecx,NumberOfEntries;循環(huán)計(jì)數(shù)器
L1:
    cmp al,[ebx];是否發(fā)現(xiàn)匹配項(xiàng)
    jne L2  ;否 繼續(xù)循環(huán)
    call NEAR PTR [ebx+1];是 調(diào)用對(duì)應(yīng)過(guò)程
    mov edx,OFFSET result
    call WriteString
    call WriteInt
    call Crlf
    jmp L3 ;退出搜索
L2:
    add ebx,EntrySize;指向下一個(gè)表項(xiàng)
    Loop L1 
L3:
    exit
main ENDP

Process_A PROC;+
    xor eax,eax
    mov al,number1
    add al,number2
    ret
Process_A ENDP

Process_B PROC;-
    xor eax,eax
    mov al,number1
    sub al,number2
    ret
Process_B ENDP

Process_C PROC;*
    xor eax,eax
    mov al,number1
    imul number2
    ret
Process_C ENDP

Process_D PROC;/
    xor eax,eax
    mov al,number1
    idiv number2
    ret
Process_D ENDP
END main
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容