汇编经典小程序 下载本文

内容发布更新时间 : 2024/12/25 0:56:42星期一 下面是文章的全部内容请认真阅读。

实验一:判断一个数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 JMP L4 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

1

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 INT 21H

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寄存器

2

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

3