汇编语言,整得好的话可以加钱

功能描述:通过编程实现软中断指令INT 80H;当输入参数AH=1,实现一个无符号整数的十进制输入,结果放在AX寄存器;当输入参数AH=2,实现一个无符号整数的十进制显示;使用一主程序测试并验证该软中断指令。编程提示:1.编程实现以上功能; 2.在主程序中首先把以上中断程序(要注意保护现场、恢复现场)入口地址保存到中断向量表,然后才可以调用该软中断指令; ; 中断处理子程序如下定义: SERVICE PROC FAR …… IRET 向量表修改可通过如下指令实现(注“SERVICE”为中断程序名): MOV AX, SEG SERVICE
MOV DS,AX
MOV DX,OFFSET SERVICE
MOV AH,25H
MOV AL,80H
INT 21H
输入10进制数软中断调用方法:
MOV AH,1
INT 80H
MOV BX,AX ;(结果放入BX)
显示10进制数软中断调用方法: MOV AH,2 ;要显示的数在BX
INT 80H

下面是一个使用汇编语言解决此问题的示例代码:

; 定义软中断处理子程序
SERVICE PROC FAR
    ; 保护现场
    push bp
    mov bp, sp

    ; 判断AH的值
    cmp ah, 1
    jne read_number

    ; 输入一个无符号整数的十进制值
    xor ax, ax
    xor dx, dx
    mov ah, 0
    int 21h
    jmp done

read_number:
    ; 显示一个无符号整数的十进制值
    xor ah, ah
    int 21h

done:
    ; 恢复现场
    pop bp
    iret
SERVICE ENDP

; 主程序
main proc
    ; 保存软中断处理子程序的入口地址到中断向量表
    mov ax, seg SERVICE
    mov ds, ax
    mov dx, offset SERVICE
    mov ah, 25h
    mov al, 80h
    int 21h

    ; 输入一个无符号整数的十进制值
    mov ah, 1
    int 80h
    mov bx, ax

    ; 显示一个无符号整数的十进制值
    mov ah, 2
    int 80h

    ; 结束程序
    mov ax, 4c00h
    int 21h
main endp

end main

在运行上述代码之前,需要使用键盘输入替换 int 21h 语句。

以下是使用汇编语言实现软中断指令 INT 80H 的代码示例:

; 定义中断处理子程序
SERVICE PROC FAR
PUSH AX ; 保护现场
PUSH BX
PUSH CX
PUSH DX


; 根据参数AH的值执行不同的操作
CMP AH, 1
JE INPUT_INT
CMP AH, 2
JE DISPLAY_INT

; 恢复现场
POP DX
POP CX
POP BX
POP AX
IRET

INPUT_INT:
; 实现无符号整数的十进制输入
; 此处省略实现细节
JMP DONE

DISPLAY_INT:
; 实现无符号

以下是一个完整的中断处理子程序的实现示例:

// 中断处理子程序
void __interrupt __far service(void)
{
    // 保护现场
    _asm {
        push ax
        push bx
        push cx
        push dx
        push es
    }

    // 获取参数AH的值
    _asm {
        mov ah, [bp + 4]
    }

    // 判断参数AH的值
    switch (ah) {
        case 1: {  // 输入无符号整数
            unsigned int num;
            scanf("%u", &num);
            _asm {
                mov ax, num
            }
            break;
        }
        case 2: {  // 显示无符号整数
            _asm {
                mov bx, [bp + 6]
            }
            printf("%u\n", bx);
            break;
        }
    }

    // 恢复现场
    _asm {
        pop es
        pop dx
        pop cx
        pop bx
        pop ax
    }

    // 中断结束
    _asm {
        iret
    }
}