汇编:使用表驱动选择进行四则运算

include Irvine32.inc ; 引入作者的汇编头文件

.data
CaseTable BYTE '+';查询值
          DWORD Process_A;过程地址
EntrySize = ($-CaseTable)
          BYTE '-'
          DWORD Process_B
          BYTE '*'
          DWORD Process_C
          BYTE '/'
          DWORD Process_D
NumberOfEntries = ($-CaseTable)/EntrySize
number1 BYTE ?
number2 BYTE ?;保存输入的两个整数
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;输入第一个数字
    mov number1,al
    mov edx,OFFSET input2
    call WriteString
    call ReadInt;输入第二个数字
    mov number2,al
    mov edx,OFFSET prompt
    call WriteString
    call ReadChar;输入操作符
    call WriteChar
    call Crlf
    mov ebx,OFFSET CaseTable;设置ebx为表指针
    mov ecx,NumberOfEntries;循环计数器
L1:
    cmp al,[ebx];是否发现匹配项
    jne L2  ;否 继续循环
    call NEAR PTR [ebx+1];是 调用对应过程
    mov edx,OFFSET result
    call WriteString
    call WriteInt
    call Crlf
    jmp L3 ;退出搜索
L2:
    add ebx,EntrySize;指向下一个表项
    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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容