第1个回答 2009-12-08
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
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
; -------------------------------------
; 功能:置光标位置
; 入口:DH=行坐标; DL=列坐标
SetCursor Proc Near
PUSH AX
MOV AH,2
INT 10H
POP AX
RET
SetCursor EndP
; -------------------------------------
; 功能:显示输出多个相同的字符
; 入口:AL=要显示的字符,CX=字符次数
Output_Chrs proc Near
push cx
push bx
push ax
xor bx,bx
mov ah,0ah
int 10h
pop ax
pop bx
pop cx
ret
Output_Chrs endp
; -------------------------------------
; 功能:输出回车换行
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
; -------------------------------------
Prompt_Num db 'Please input a number(1-9):$'
Press_Key db 13,10,13,10,'Press any key to exit...$'
Start: push cs
pop ds
Output Prompt_Num
Input_Num: mov ah,1
int 21h
cmp al,'3'
jb Input_Num
cmp al,'9'
ja Input_Num
and al,0fh
call Output_CTLF ;输入一个回车、换行
call Output_CTLF
xor bx,bx
mov ah,3
int 10h
mov cl,al
xor ch,ch
test cx,1
jnz $+3
inc cx
mov al,'*'
Disp_Chrs: call SetCursor ;置光标位置
call Output_Chrs ;显示输出多个相同的字符
call Output_CTLF
cmp cx,1
jz Exit_Proc
inc dh
inc dl
dec cx
dec cx
jmp Disp_Chrs
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Score_Table: ;学生成绩存储区
Code ENDS
END Start ;编译到此结束
第2个回答 2009-12-08
dseg segment
tsh db 'please input (0~9):','$';提示
kge db ' ','$';两个空格
huanh db 0dh,0ah,'$';换行
dseg ends
sseg segment stack
db 8989 dup(?)
sseg ends
cseg segment
assume cs:cseg,ds:dseg,ss:sseg
start:
mov ax,dseg
mov ds,ax
xor ax,ax
mov dx,offset tsh
mov ah,09
int 21h
mov ah,01
int 21h
push ax
mov dx,offset huanh
mov ah,09
int 21h
pop ax
xor ah,ah
and al,0fh
push ax;*的个数
mov cl,02
div cl
test ah,0ffh
jz a1;判断余数奇偶,偶就跳转
pop ax
jmp a3
a1: pop ax
add ax,1;偶数加1
a3: mov cx,ax
mov bx,ax
push ax;第一次循环输入*的个数
inc bx
shr bx,1
mov si,bx;这是行数
a2:
mov dl,'*'
mov ah,02
int 21h
mov dl,' '
mov ah,02
int 21h
loop a2
pop cx;第一次循环输入*的个数
dec cx
dec cx
push cx
mov dx,offset huanh
mov ah,09
int 21h
dec bx
mov di,si
sub di,bx;
a4: mov dx,offset kge
mov ah,09
int 21h
dec di
jnz a4;和上一行的第di+1个对齐
test bx,0ffffh
jnz a2
mov dx,offset huanh
mov ah,09
int 21h
mov ah,4ch
int 21h
cseg ends
end start
第3个回答 2009-12-08
可运行,没用循环,因为如此一来可重用率大,代码没写注释,很通俗
masm5.0运行成功
data segment
disp0 db 0ah,0dh,'*********$'
disp1 db 0ah,0dh,' *******$'
disp2 db 0ah,0dh,' *****$'
disp3 db 0ah,0dh,' ***$'
disp4 db 0ah,0dh,' *$'
disp5 db 0ah,0dh,'please put a number again$'
disp6 db 0ah,0dh,'please put a number:$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax, data
mov ds, ax
lea dx,disp6
mov ah, 9
int 21h
mov ah,1
int 21h
mov bl,al
mov bh,0
cmp bx,'1'
jb error
jz next1
cmp bx,'3'
jbe next3
cmp bx,'5'
jbe next5
cmp bx,'7'
jbe next7
cmp bx,'9'
ja error
lea dx, disp0
mov ah, 9
int 21h
next7:
lea dx,disp1
mov ah, 9
int 21h
next5:
lea dx,disp2
mov ah, 9
int 21h
next3:
lea dx,disp3
mov ah, 9
int 21h
next1:
lea dx,disp4
mov ah, 9
int 21h
jmp exit
error:
lea dx,disp5
mov ah,9
int 21h
exit:
mov ah, 4ch
int 21h
code ends
end start
第4个回答 2009-12-08
汇编语言也出这样的题目?!
你会什么语言呢,C会吗,PASCAL会吗,VB呢,随便会那一种都可以编写一个程序,编译为EXE,然后利用反汇编软件转换为汇编语言源程序既可。
第5个回答 2009-12-11
下列程序运行成功,可以满足要求。
DATA SEGMENT PARA PUBLIC 'DATA'
TIUI1 DB 'PLEASE INPUT A NUMBER(1-9):$'
TIUI9 DB 13,10,7,'PRESS ANY KEY TO EXIT...$'
DATA ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CODE, DS:DATA, ES:DATA
START: PUSH DS
MOV AX,00H
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX, TIUI1
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H
CALL CR_LF
TEST AL, 1
JNZ PPP
INC AL
PPP:
CALL CR_LF
SUB AL, 30H
MOV BH, 1
MOV BL, AL
MOV CX, BX
INC AL
X10:
PUSH AX
MOV BX, CX
MOV DL, ' '
MOV AH, 02H
X0:
INT 21H
SUB BH, 1
JNZ X0
MOV DL, '*'
MOV AH, 02H
X1:
INT 21H
SUB BL, 1
JNZ X1
CALL CR_LF
INC CH
SUB CL, 2
POP AX
SUB AL, 2
JNZ X10
E_MAIN:
LEA DX, TIUI9
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H
MOV AH, 4CH ;结束程序
INT 21H
MAIN ENDP
CR_LF PROC NEAR
PUSH AX
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
POP AX
RET
CR_LF ENDP
CODE ENDS
END START
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/8b82b9014a90f60386eeb9473912b31bb051ed50?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
本回答被提问者采纳