汇编语言的一道程序设计题 急求!!

2024-11-25 03:57:37
推荐回答(2个)
回答1:

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -------------------------------------
; 功能:根据自变量x的值,计算因变量y的值
; 入口:x=自变量
; 出口:在当前光标位置显示y的值
Calculate_y Proc Near
cmp x,1
jnz $+8
mov y,0
ret
cmp x,3
jae $+8
mov y,1
ret
mov y,2
ret
Calculate_y EndP
; -------------------------------------
x db ? ;自变量
y db ? ;因变量
Prompt_x db 'x=$' ;输入x的值提示信息
Prompt_y db 13,10,'y=$' ;显示y的值提示信息
Start: push cs
pop ds
Input_x: Output Prompt_x ;提示输入x的值
mov ah,1
int 21h
cmp al,27 ;Esc?
jz Exit_Proc ;结束程序
cmp al,'1' ;<1?
jb Input_x ;重新输入
cmp al,'9' ;>9?
ja Input_x ;重新输入
and al,0fh
mov x,al ;保存自变量
call Calculate_y ;计算函数值
Output Prompt_y ;提示显示y的值
mov dl,y
or dl,30h
mov ah,2 ;显示一个字符
int 21h
call Output_CTLF
call Output_CTLF
jmp Input_x
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束

回答2:

DATA SEGMENT
X DB 0
Y DB 0
MSG DB "Please input the number(0-9):$"
ERRSTR DB "INPUT ERROR!$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX
LEA BX,X
INP: LEA DX,MSG
MOV AH,9
INT 21H
MOV AH,1
INT 21H ;
SUB AL,20H
LEA DX,Y
MOV [DX],AL
CMP AL,3
JG GR
JL LE
EQ: MOV [DX],0
JMP DSP
LE: CMP AL,0
JNG ERR
MOV [DX],1
JMP DSP
GR: CMP X,9
JG ERR
MOV [DX],2
JMP DSP
DSP: MOV DL,[DX]
ADD DL,20H
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
ERR: LEA DX,ERRSTR
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN