汇编语言 实验2 汇编语言程序设计(顺序、多分支、循环)

  • 实验目的

1、掌握顺序和循环程序结构和设计方法;

2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

 

  • 实验内容

1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:

①计算表达式值(V–(X*Y+Z-720))/X;

②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

STACK SEGMENT STACK
DB 1024 DUP(?)
STACK ENDS
DATA SEGMENT
X WORD 1
Y WORD 1
Z WORD 720
V WORD 6
SUM1 WORD 0
SUM2 WORD 0
DATA ENDS
CODE SEGMENT 'CODE'
ASSUME CS:CODE, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX
MOV AX, X
IMUL Y
ADD AX, Z
ADC DX, 0
SUB AX, 720
SBB DX, 0
SUB AX, V
SBB DX, 0
NOT AX
NOT DX
ADD AX, 1
ADC DX, 0
IDIV X
MOV SUM1, AX
MOV SUM2, DX
MOV AX, 4C00H
INT 21H
CODE ENDS
END START

2、使用地址表实现如下功能:根据输入的数字1-7,分别显示相应的英文星期名,如果输入其他字符,则重新输入。

STACK SEGMENT STACK
DB 1024 DUP(?)
STACK ENDS
DATA SEGMENT
ADDRESS DW A1, A2, A3, A4, A5, A6, A7
MON DB 'Monday$'
TUES DB 'Tuesday$'
WED DB 'Wednesday$'
THUR DB 'Thurday$'
FRI DB 'Friday$'
SAT DB 'Saturday$'
SUN DB 'Sunday$'
CRLF DB 13, 10, '$'
DATA ENDS
CODE SEGMENT 'CODE'
ASSUME CS:CODE, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX
RESTART:
MOV AH, 1
INT 21H
LEA DX, CRLF
MOV AH, 9
INT 21H
CMP AL, '0'
JL RESTART
CMP AL, '7'
JG RESTART
AND AL, 0FH
MOV AH, 0
DEC AX
MOV BX, AX
SHL BX, 1
JMP ADDRESS[BX]
A1:
LEA DX, MON
JMP DONE
A2:
LEA DX, TUES
JMP DONE
A3:
LEA DX, WED
JMP DONE
A4:
LEA DX, THUR
JMP DONE
A5:
LEA DX, FRI
JMP DONE
A6:
LEA DX, SAT
JMP DONE
A7:
LEA DX, SUN
DONE:
MOV AH, 9
INT 21H
MOV AX, 4C00H
INT 21H
CODE ENDS
END START

3、求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。

OUTPUTONE MACRO
LOCAL SKIP
PUSH AX
PUSH DX
OR DL, 30H
CMP DL, 39H
JBE SKIP
ADD DL, 7
SKIP:
MOV AH, 02H
INT 21H
POP DX
POP AX
ENDM
STACK SEGMENT STACK
DB 1024 DUP(?)
STACK ENDS
DATA SEGMENT
GRADE DW 50 DUP(?)
SUM DW 0
MAX DW 0
MIN DW 100
SHARE DW 0
CRLF DB 13, 10, '$'
DATA ENDS
CODE SEGMENT 'CODE'
ASSUME CS:CODE, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX

MOV CX, LENGTHOF GRADE
MOV AX, 0
MOV BX, 0
INIT:
MOV GRADE[BX], AX
ADD BX, 2
INC AX
LOOP INIT

MOV BX, 0
MOV CX, LENGTHOF GRADE
S:
MOV AX, GRADE[BX]
ADD SUM, AX

CMP AX, MIN
JAE SKIP1
MOV MIN, AX
SKIP1:
CMP AX, MAX
JBE SKIP2
MOV MAX, AX
SKIP2:
ADD BX, 2
LOOP S

MOV AX, SUM
MOV CX, LENGTHOF GRADE
MOV DX, 0
DIV CX
MOV SHARE, AX
CALL OUTPUT
MOV AX, MAX
MOV SHARE, AX
CALL OUTPUT
MOV AX, MIN
MOV SHARE, AX
CALL OUTPUT

MOV AX, 4C00H
INT 21H

OUTPUT PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX

MOV DX, SHARE
MOV CL, 12
SHR DX, CL
AND DX, 0FH
OUTPUTONE

MOV DX, SHARE
MOV CL, 8
SHR DX, CL
AND DX, 0FH
OUTPUTONE

MOV DX, SHARE
MOV CL, 4
SHR DX, CL
AND DX, 0FH
OUTPUTONE

MOV DX, SHARE
AND DX, 0FH
OUTPUTONE

MOV DX, 'H'
MOV AH, 02H
INT 21H

LEA DX, CRLF
MOV AH, 09H
INT 21H
POP DX
POP CX
POP BX
POP AX
RET
OUTPUT ENDP
CODE ENDS
END START

4、从键盘读入一个字符串,以Enter结束,字符串不超过60个字符,并打印该字符串;查找中间是否有自己名字拼音首字母缩写的子串。如果有,输出‘TRUE’;否则,输出‘FALSE’)。

STACK SEGMENT STACK
DB 1024 DUP(?)
STACK ENDS
DATA SEGMENT
BUF DB 60, 0, 60 DUP(?)
TRUE DB 'TRUE', 10, 13, '$'
FALSE DB 'FALSE', 10, 13, '$'
ABBR DB 'RZS'
CRLF DB 13, 10, '$'
DATA ENDS
CODE SEGMENT 'CODE'
ASSUME CS:CODE, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX
LEA DX, BUF
MOV AH, 0AH
INT 21H
MOV AL, BUF+1
ADD AL, 2
MOV AH, 0
MOV SI, AX
MOV BUF[SI], '$'
LEA DX, CRLF
MOV AH, 09H
INT 21H
LEA DX, BUF+2
MOV AH, 09H
INT 21H
LEA DX, CRLF
MOV AH, 09H
INT 21H

MOV AX, DS
MOV ES, AX
LEA SI, BUF+2
LEA DI, ABBR
MOV BX, SI
MOV DX, DI
MOV AL, BUF+1
MOV AH, 0
CLD
S:
MOV CX, LENGTHOF ABBR
CMP AX, CX
JB NOTFOUND
REPZ CMPSB
JZ FOUND
INC BX
MOV SI, BX
MOV DI, DX
DEC AX
JMP S
NOTFOUND:
LEA DX, FALSE
MOV AH, 09H
INT 21H
JMP DONE
FOUND:
LEA DX, TRUE
MOV AH, 09H
INT 21H
DONE:
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
  • 实验过程和程序
  • 实验结果(包括必要的截图)
  • 实验体会

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值