?? mycode2-3.asm
字號:
; multi-segment executable file template.
data segment PARA PUBLIC 'DATA'
NUM1 DW '?'
NUM2 DW '?'
OPR DB '?'
DATA ends
stack segment PARA STACK 'STACK'
dw 128 dup(0)
STACK ends
PUTC MACRO char
PUSH AX
MOV AL, char
MOV AH, 0Eh
INT 10h
POP AX
ENDM
code segment PARA PUBLIC 'CODE'
assume cs:code
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
assume ds:data
MOV AX,OFFSET PLUS
MOV DX,AX
MOV AX,SEG PLUS
MOV DS,AX
MOV AL,60H
MOV AH,25H
INT 21H
STI
MOV AX,OFFSET MINUS
MOV DX,AX
MOV AX,SEG MINUS
MOV DS,AX
MOV AL,61H
MOV AH,25H
INT 21H
STI
MOV AX,OFFSET MULT
MOV DX,AX
MOV AX,SEG MULT
MOV DS,AX
MOV AL,62H
MOV AH,25H
INT 21H
STI
MOV AX,OFFSET DIVI
MOV DX,AX
MOV AX,SEG DIVI
MOV DS,AX
MOV AL,63H
MOV AH,25H
INT 21H
STI
MOV CX,0
L1: MOV AH, 00h
INT 16h
; and print it:
MOV AH, 0Eh
INT 10h
cmp AL,"/"
JNA STORE_OPR
MOV AH,00H
SUB AX,30H
MOV NUM1,AX
JMP L1
STORE_OPR:
MOV OPR,AL
L2: MOV AH, 00h
INT 16h
; and print it:
MOV AH, 0Eh
INT 10h
CMP AL,"="
JE CAL
MOV AH,00H
SUB AX,30H
MOV NUM2,AX
JMP L2
CAL:
cmp OPR, '+'
je do_plus
cmp OPR, '-'
je do_minus
cmp OPR, '*'
je do_mult
cmp OPR, '/'
je do_div
do_plus: INT 60H
do_minus: INT 61H
do_mult: INT 62H
do_div: INT 63H
plus:
mov ax, num1
add ax, num2
call print_num ; print ax value.
jmp exit
minus:
mov ax, num1
sub ax, num2
call print_num ; print ax value.
jmp exit
mult:
mov ax, num1
imul num2 ; (dx ax) = ax * num2.
call print_num ; print ax value.
; dx is ignored (calc works with tiny numbers only).
jmp exit
divI:
; dx is ignored (calc works with tiny integer numbers only).
mov dx, 0
mov ax, num1
idiv num2 ; ax = (dx ax) / num2.
call print_num
putc ' '
putc 'r'
putc ' '
mov ax,dx
call print_num
jmp exIT
PRINT_NUM PROC NEAR
CMP AX,00H
JNS GO
PUTC '-'
NEG AX
GO: MOV BL,100
DIV BL
MOV CL,AL
CMP AL,00H
JZ L3
CALL BTOASC
CALL DISCHAR
L3: MOV AL,AH
MOV AH,0
MOV BL,10
DIV BL
ADD CL,AL
CMP CL,00H
JZ L4
CALL BTOASC
CALL DISCHAR
L4:
MOV AL,AH
CALL BTOASC
CALL DISCHAR
ret
PRINT_NUM ENDP
EXIT: MOV AH,4CH
INT 21H
BTOASC PROC NEAR
ADD AL,30H
RET
BTOASC ENDP
DISCHAR PROC NEAR
PUSH BX
PUSH AX
MOV BX,0
MOV AH,0EH
INT 10H
POP AX
POP BX
RET
DISCHAR ENDP
CODE ends
end start ; set entry point and stop the assembler.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -