1、编写程序任意输入两个字符串并判断它们是否相同,若相同则输出YES,否则输出NO。(文件命名为“汇编语言程序设计实验1.asm”)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
DATAS SEGMENT
STRING1 DB 80,?,80 DUP(?)
STRING2 DB 80,?,80 DUP(?)
YES DB 0DH, 0AH,"YES$"
NO DB 0DH, 0AH,"NO$"
ENDL DB 0DH,0AH,"$"
DATAS ENDS

STACKS SEGMENT
DW 100H DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX

LEA DX,STRING1
MOV AH,0AH
INT 21H

LEA DX,ENDL
MOV AH,09H
INT 21H

LEA DX,STRING2
MOV AH,0AH
INT 21H

LEA SI,STRING1
INC SI

LEA DI,STRING2
INC DI

MOV CX,0
MOV CL,[SI];
INC CX

CYCLE:
MOV AL,[SI]
MOV BL,[DI]
CMP AL,BL
JNE PRINT_NO
INC SI
INC DI
LOOP CYCLE

PRINT_YES:
MOV DX,OFFSET YES
MOV AH,09H
INT 21H
JMP OVER

PRINT_NO:
MOV DX,OFFSET NO
MOV AH,09H
INT 21H
JMP OVER

OVER:
MOV AH,4CH
INT 21H

CODES ENDS
END START

2、变量BUF中存放着10个有符号的字节数据,编程将这10个数按从小到大排序,不要求输出。(文件命名为“汇编语言程序设计实验2.asm”)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
DATAS SEGMENT
BUF DB 9,8,7,6,5,4,3,2,1,0
ENDL DB 0DH,0AH,"$"

DATAS ENDS

STACKS SEGMENT
DW 100H DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:
MOV AX,DATAS
MOV DS,AX

MOV CX,9
MOV SI,OFFSET BUF

;冒泡排序
LOOP1:
MOV DI,CX ; 将CX的值赋给DI,用于内循环计数
MOV BX,0

LOOP2:
MOV AL,[SI + BX]
CMP AL,[SI + BX + 1]
JL NEXT
XCHG AL,[SI + BX + 1] ;大的数往高地址处移动
MOV [SI + BX],AL

NEXT:
INC BX
CMP BX,DI
JL LOOP2
LOOP LOOP1

MOV AH,4CH
INT 21H

CODES ENDS
END START