8086汇编经典例程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
==========================================
5.编写一个数组排序(从小到大)的小程序,数组在程序中定义,程序先将原数组显示一遍,然后排序,再将排好序的数组显示一遍。
==========================================
AAA SEGMENT
BUF DB '45$'
L = $ - BUF
ary dw -897,345,6789,8654,-1234,
-3456,-99,-678,987,567,
32762,-12121,0,3434,4645,-234,
23455,-100,100,1000,-1000
dw 572,-2345,-6543,-1234,9999
|
len dw ($-ary)/2
ASSUME CS:AAA, DS:AAA
MAIN PROC FAR
PUSH CS
POP DS
LEA SI,ARY
MOV CX,LEN
NEXT3: MOV BX,[SI]
CALL DISP
CALL SPACE
-
ADD SI,2
LOOP NEXT3
CALL CRLF
CALL CRLF
LEA SI,ARY
MOV CX,LEN
CALL SORT
LEA SI,ARY
MOV CX,LEN
NEXT5: MOV BX,[SI]
CALL DISP
…
CALL SPACE
ADD SI,2
LOOP NEXT5
MOV AH,4CH
INT 21H
MAIN ENDP
DISP PROC
PUSH SI
PUSH AX
PUSH BX
!
PUSH DX
PUSH CX
MOV CX,0
CMP BX,0
JNL NEXT1
NEG BX
MOV CX,1
NEXT1: LEA SI,BUF+l-1
MOV AX,BX
MOV BX,10
NEXT: MOV DX,0
}
DIV BX
ADD DL,30H
DEC SI
MOV [SI],DL
CMP AX,0
JNE NEXT
CMP CX,0
JE NEXT2
DEC SI
MOV BYTE PTR [SI],'-'
NEXT2: MOV DX,SI
!
MOV AH,9
INT 21H
POP CX
POP DX
POP BX
POP AX
POP SI
RET
DISP ENDP
SORT PROC
(
NEXTT: PUSH CX
MOV DI,SI
MOV AX,[SI]
NEXT0: CMP AX,[DI]
JL NEXTQ
MOV BX,AX
MOV AX,[DI]
MOV [DI],BX
NEXTQ: ADD DI,2
LOOP NEXT0
MOV [SI],AX
…
ADD SI,2
POP CX
LOOP NEXTT
RET
SORT ENDP
CRLF PROC
PUSH AX
PUSH DX
MOV DL,13
MOV AH,2
|
INT 21H MOV DL,10 INT 21H POP DX
POP AX
RET CRLF ENDP
SPACE PROC
PUSH AX
PUSH DX
】
MOV DL,' '
MOV AH,2
INT 21H
POP DX
POP AX
RET
SPACE ENDP
AAA ENDS
END MAIN
===============================================
6.!
7.编写一个程序,从键盘输入10个十进制数字字符,然后将这些数字加密存储在缓冲区BUFFER中。加解密表如下:==========================================
qqq segment
TAB1 DB 'QWERTYUIOPASDFGHJKLZXCVBNM'
TAB2 DB 'qazwsxedcrfvtgbyhnujmikolp'
TAB3 DB ')(*&^%/#@!'
LEN = $-tab1
MSS1 DB 13,10,'Please chose a
functioc:',0DH,0AH
DB ' 1--jiami ',0DH,0AH
DB ' 2---jiemi ',13,10
…
DB ' 0--exit$'
MSS2 DB 0dh,0ah,'Error! You have press " "
key!$'
MM1 DB 'Your input is:'
BUF1 DB 255 DUP()
MM2 DB 'My output is:'
BUF2 DB 255 DUP()
qqq ends
ccc segment
assume cs:ccc,ds:qqq
main proc far
;
start: mov ax,qqq
mov ds,ax
rep1: call crlf
LEA SI,BUF1
LEA DI,BUF2
lea dx,mss1 ;显示菜单
mov ah,9
int 21h
mov ah,1 ;输入你的选项
int 21h
#
cmp al,'0' ;输入0,结束
je quit
cmp al,'1' ;输入1,加密
je jiami
cmp al,'2' ;输入2,解密
je jiemi
mov [mss2+25],al ;其他字符,错误,重输
入
lea dx,mss2
mov ah,9
int 21h
jmp rep1
#
quit: mov ah,4ch
int 21h
jiami: call crlf
next1: mov ah,1
int 21h
cmp al,27
je NEXT14
MOV [SI],AL
cmp al,'A'
jnae next3
]
cmp al,'Z'
ja next3