汇编经典小程序(精编文档).doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【最新整理,下载后即可编辑】
实验一:判断一个数X的正,负数,还是零。(假设是正数,输出+,是负数,输出-,是零,输出This is a zore !)
DATA SEGMENT
X DB 10
CR EQU 0DH
LF EQU 0AH
W DB 'This is a zore!',CR,LF,'$'
ZHENG DB '+',CR,LF,'$'
FU DB '-',CR,LF,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,X
AND AL,AL
JZ L1
SHL AL,1
JC L3
JMP L2
L1: MOV DX,OFFSET W
MOV AH,9
INT 21H
JMP L4
L2: MOV DX,OFFSET ZHENG
MOV AH,9
INT 21H
JMP L4
L3: MOV DX,OFFSET FU
MOV AH,9
INT 21H
L4: MOV AH,4CH
INT 21H
CODE ENDS
END START
实验二:求十个数中的最小数,并以十进制输出。(若要求最大的,只要把JC 改为JNC 即可)(仅局限于0---16间的数比较,因为ADD AL,30H只是针对一位的十六进制转换十进制的算法)DATA SEGMENT
XDAT DB 0AH,1FH,02H,03H,04H,05H,06H,07H,08H,09H
MIN DB ?
CR EQU 0DH
LF EQU 0AH
W DB ' is min',CR,LF,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CX,9
MOV SI,OFFSET XDAT
MOV AL,[SI]
L2: CMP AL,[SI+1]
JC L1
MOV AL,[SI+1]
L1: INC SI
LOOP L2
ADD AL,30H
MOV DL,AL
MOV AH,2
MOV DX,OFFSET W
MOV AH,9
INT 21H
CODE ENDS
END START
实验三:设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小从新排列的程序。
DATA SEGMENT
BUF DB 87,234,123
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF
MOV AL,[SI] ;把3个数取到寄存器中
MOV BL,[SI+1]
MOV CL,[SI+2]
CMP AL,BL ;排序,将最大数送AL寄存器
JAE NEXT1
XCHG AL,BL
NEXT1:CMP AL,CL
JAE NEXT2
XCHG AL,CL
NEXT2:CMP BL,CL ;将最小输送CL寄存器JAE NEXT3
XCHG BL,CL
NEXT3:MOV [SI],AL ;从大到小依次存回缓冲区,AL,BL,CL
MOV [SI+1],BL
MOV [SI+2],CL
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验三(2):设某一数组的长度为N,个元素均为字数据,试编制一个程序使该数组中的数据按照从小到大的次序排列。(要从大到小排序,只需把JBE改为JAE即可)
ADATA SEGMENT
N EQU 10
DATA DW 87,54,78,45,35,23,04H,12H,03H,21H
ADATA ENDS
ACODE SEGMENT
ASSUME CS:ACODE,DS:ADATA
START:MOV AX,ADATA
MOV DS,AX
MOV DS,AX
MOV BX,0
MOV CX,N
DEC CX
LOP1: MOV DX,CX
LOP2: MOV AX,DATA[BX]
CMP AX,DATA[BX+2]
JBE CONTI
XCHG AX,DATA[BX+2]
MOV DATA[BX],AX
CONTI: ADD BX,2
LOOP LOP2
MOV CX,DX
MOV BX,0
LOOP LOP1
MOV AH,4CH
INT 21H
ACODE ENDS
END START
实验四:求十个数中的最小数,并以十六进制输出。(若要求最大的,只需把JC 改为JNC 即可)
DATA SEGMENT
XDAT DB 0AH,1FH,0FH,0FH,0EH,0BH,0CH,0DH,0EH,0CH TAB DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,4 5H,46H
MIN DB ?
CR EQU 0DH
LF EQU 0AH
W DB ' is min',CR,LF,'$'
DATA ENDS
SSEG SEGMENT STACK
DW 100 DUP(?)
SSEG ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CX,9
MOV SI,OFFSET XDAT
MOV AL,[SI]
L2: CMP AL,[SI+1]