8086汇编经典例程

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

相关文档
最新文档