汇编经典小程序(精编文档).doc

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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]

相关文档
最新文档