华电保定微机原理汇编实验

发布时间:2020-08-19 19:19:43

实验一 、数据块传送

1. 将数据段中2000H单元开始存放的10个数(8位数)传送到3000H开始的10个字节中。

源程序:

DATAS SEGMENT

;此处输入数据段代码

ORG 2000H

DATA1 DB 1,2,3,4,5,6,7,8,9,10

ORG 3000H

DATA2 DB 10 DUP(0)

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

MOV SI,2000H

MOV DI,3000H

MOV CX,10

NEXT:MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

2. 将数据段中2000H单元开始存放的10个数(16位数)传送到3000H开始的10个字中。

源程序:

DATAS SEGMENT

;此处输入数据段代码

ORG 2000H

DATA1 DW 1,2,3,4,5,6,7,8,9,10

ORG 3000H

DATA2 DW 10 DUP(0)

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

MOV SI,2000H

MOV DI,3000H

MOV CX,10

NEXT:MOV AX,[SI]

MOV [DI],AX

ADD SI,2

ADD DI,2

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行后:

3. 将数据DATA1中的10个字节数据传送到数据段DATA2中

源数据:

DATAS SEGMENT

;此处输入数据段代码

DATA1 DB 1,2,3,4,5,6,7,8,9,10

ORG 1000H

DATA2 DB 10 DUP(0)

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,DATA1

LEA DI,DATA2

MOV CX,10

NEXT:MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

初始值:

运行后:

4. 将数据段中2000H开始的20个数据传送到2010H开始的20个单元中。

源程序:

DATAS SEGMENT

;此处输入数据段代码

ORG 2000H

DATA1 DB 5 DUP(1,2,3,4,5,6)

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

MOV SI,2000H

MOV DI,2100H

MOV CX,20

NEXT1:MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

DEC CX

JNZ NEXT1

MOV SI,2100H

MOV DI,2010H

MOV CX,20

NEXT2:MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

DEC CX

JNZ NEXT2

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

实验二 查表

实验目的:熟悉实验环境;熟练掌握查表程序

5. 已知0~15的平方值表,查表求X的平方值,送到Y单元,用两种方法

DATAS SEGMENT

;此处输入数据段代码

TABLE DB 0, 1,4,9,16,25,36,49,64,81,100,121,144,169,196,255

X DB 3

Y DB 0

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,TABLE

MOV AL,X

MOV AH,0

ADD BX,AX

MOV AL,[BX]

MOV Y,AL

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

方法二:

源程序:

DATAS SEGMENT

;此处输入数据段代码

TABLE DB 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,255

X DB 3

Y DB 0

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,TABLE

MOV AL,X

XLAT

MOV Y,AL

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果

6. 2已知0~255的平方值表,查表求X的平方值,送到Y单元

源程序

DATAS SEGMENT

;此处输入数据段代码

TABLE DW 0,1,4,9,16,25,250 DUP(0)

X DW 3

Y DW

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,TABLE

MOV AX,X

ADD AX,AX

ADD BX,AX

MOV AX,[BX]

MOV Y,AX

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果

实验三、计算

7. 计算1234F000H+H的和

源程序:

DATAS SEGMENT

;此处输入数据段代码

DATA1 DD 1234F000H

DATA2 DD H

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,DATA1

LEA DI,DATA2

MOV AX,[SI]

ADD AX,[DI]

MOV [SI],AX

MOV AX,[SI+2]

ADC AX,[DI+2]

MOV [SI+2],AX

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果

8. 计算8字节数据788H与 99AABBCCDDEEFF00H的和

源程序:

DATAS SEGMENT

;此处输入数据段代码

DATA1 DQ 788H

DATA2 DQ 99AABBCCDDEEFF00H

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,DATA1

LEA DI,DATA2

MOV CX,4

CLC

NEXT:MOV AX,[SI]

ADC AX,[DI]

MOV [SI],AX

ADD SI,2

ADD DI,2

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果

9. 计算8字节的BCD码十进制数788H与H的和

源程序:

DATAS SEGMENT

;此处输入数据段代码

DATA1 DB 88H,77H,66H,55H,44H,33H,22H,11H

DATA2 DB 22H,33H,44H,55H,66H,77H,88H,99H

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,DATA1

LEA DI,DATA2

CLC

MOV CX,8

NEXT:MOV AL,[SI]

ADC AL,[DI]

DAA

MOV [SI],AL

INC SI

INC DI

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果

10. 计算10个字节数据的和(数据自己定义)

源程序:

DATAS SEGMENT

;此处输入数据段代码

DATA1 DB 1,2,3,4,5,6,7,8,9,10

SUM DB 0

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,DATA1

LEA DI,SUM

MOV CX,10

CLC

NEXT:MOV AL,[SI]

ADC SUM,AL

ADD SI,1

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果

11. 计算10个字数据的和(数据自己定义)

源程序:

DATAS SEGMENT

;此处输入数据段代码

DATA1 DW 1,2,3,4,5,6,7,8,9,10

SUM DW 0

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,DATA1

LEA DI,SUM

MOV CX,10

CLC

NEXT:MOV AX,[SI]

ADC SUM,AX

ADD SI,2

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果

实验四、计算表达式的值

12. 计算表达式的值,已知X=10,Y=5。

DATAS SEGMENT

;此处输入数据段代码

X DB 10

Y DB 5

Z DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

MOV AL,X

SUB AL,Y

MOV BL,7

MUL BL

CBW

MOV BL,Y

ADD BL,2

IDIV BL

MOV Z,AL

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验五、找最大、最小数

13. 找出2040H单元和2041H单元的大数,送2042H单元(数据自己定义)

DATAS SEGMENT

;此处输入数据段代码

ORG 2040H

DATA1 DB 11

DATA2 DB 12

DATA3 DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

MOV AL,DATA1

CMP AL,DATA2

JG GREAT

MOV AL,DATA2

GREAT:MOV DATA3,AL

MOV AH,4CH

INT 21H

CODES ENDS

END START

14. 找出10个数(8位数)里的最大数(数据自己定义)

DATAS SEGMENT

;此处输入数据段代码

DATA DB 1,2,3,6,5,4,10,9,8,7

MAX DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,DATA

MOV CX,9

MOV AL,[BX]

NEXT:INC BX

CMP AL,[BX]

JG GREAT

MOV AL,[BX]

GREAT:MOV MAX,AL

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

15. 找出10个数(8位数)里的最小数(数据自己定义)

DATAS SEGMENT

;此处输入数据段代码

DATA DB 3,2,1,6,5,4,10,9,8,7

MIN DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,DATA

MOV CX,9

MOV AL,[BX]

NEXT:INC BX

CMP AL,[BX]

JL LESS

MOV AL,[BX]

LESS:MOV MIN,AL

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

16. 找出10个数(16位数)里的最大数(数据自己定义)

DATAS SEGMENT

;此处输入数据段代码

DATA DW 3,2,1,6,5,4,10,9,8,7

MAX DW

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,DATA

MOV CX,9

MOV AX,[BX]

NEXT:ADD BX,2

CMP AX,[BX]

JG GREAT

MOV AX,[BX]

GREAT:MOV MAX,AX

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

17. 找出10个数(16位数)里的最小数(数据自己定义)

DATAS SEGMENT

;此处输入数据段代码

DATA DW 3,2,1,6,5,4,10,9,8,7

MIN DW

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,DATA

MOV CX,9

MOV AX,[BX]

NEXT:ADD BX,2

CMP AX,[BX]

JL LESS

MOV AX,[BX]

LESS:MOV MIN,AX

DEC CX

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验六、统计正数、负数个数

18. 找出10个数(8位数)里的正数个数(数据自己定义)

源程序:

DATAS SEGMENT

;此处输入数据段代码

TABLE DB -1,-2,-3,-4,-5,1,2,3,4,5

NUM DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,TABLE

MOV NUM,0

MOV CX,10

NEXT2:MOV AL,[SI]

TEST AL,80H

JNZ NEXT1

INC NUM

NEXT1:INC SI

DEC CX

JNZ NEXT2

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

19. 找出10个数(8位数)里的负数个数(数据自己定义)

源程序:

DATAS SEGMENT

;此处输入数据段代码

TABLE DB -1,-2,-3,-4,-5,1,2,3,4,5

NUM DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,TABLE

MOV NUM,0

MOV CX,10

NEXT2:MOV AL,[SI]

TEST AL,80H

JZ NEXT1

INC NUM

NEXT1:INC SI

DEC CX

JNZ NEXT2

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

20. 找出10个数(16位数)里的正数个数(数据自己定义)

源程序:

DATAS SEGMENT

;此处输入数据段代码

TABLE DW -1,-2,-3,-4,-5,1,2,3,4,5

NUM DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,TABLE

MOV NUM,0

MOV CX,10

NEXT2:MOV AX,[SI]

TEST AX,8000H

JNZ NEXT1

INC NUM

NEXT1:ADD SI,2

DEC CX

JNZ NEXT2

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

21. 找出10个数(16位数)里的负数个数(数据自己定义)

源程序:

DATAS SEGMENT

;此处输入数据段代码

TABLE DW -1,-2,-3,-4,-5,1,2,3,4,5

NUM DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,TABLE

MOV NUM,0

MOV CX,10

NEXT2:MOV AX,[SI]

TEST AX,8000H

JZ NEXT1

INC NUM

NEXT1:ADD SI,2

DEC CX

JNZ NEXT2

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

实验七、数据块比较

22. 比较数据段DS与数据段ES中的10个字节的数据是否一致

源程序:

DATAS SEGMENT

;此处输入数据段代码

TABLE1 DB 1,2,3,4,5,6,7,8,9,10

N DB

DATAS ENDS

DATAB SEGMENT

TABLE2 DB 1,2,3,4,5,6,8,7,9,10

DATAB ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

MOV BX,DATAB

MOV ES,BX

;此处输入代码段代码

LEA SI,TABLE1

LEA DI,TABLE2

CLD

MOV CX,10

MOV N,0

NEXT2:CMPSB

JNZ NEXT1

DEC CX

JNZ NEXT2

JMP EXIT

NEXT1:INC N

EXIT:MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:(相同N=0,不同N=1)

23. 比较数据段DS与数据段ES中的10个字的数据是否一致

源程序:

DATAS SEGMENT

;此处输入数据段代码

TABLE1 DW 1,2,3,4,5,6,7,8,9,10

N DB

DATAS ENDS

DATAB SEGMENT

TABLE2 DW 1,2,3,4,5,6,8,7,9,10

DATAB ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

MOV BX,DATAB

MOV ES,BX

;此处输入代码段代码

LEA SI,TABLE1

LEA DI,TABLE2

MOV CX,10

MOV N,0

CLD

NEXT2:CMPSW

JNZ NEXT1

DEC CX

JNZ NEXT2

JMP EXIT

NEXT1:INC N

EXIT:MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:(相同N=0,不同N=1)

实验八、逻辑运算与移位

24. 将数据段中4000H单元的内容拆开,高位送4001H低位,低位送4002H低位,4001H、4002H的高位清零,一般用于把数据送显示缓冲区时使用。

源程序:

DATAS SEGMENT

;此处输入数据段代码

ORG 4000H

DATA1 DB 9AH

DATA2 DB

DATA3 DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

MOV AL,DATA1

AND AL,0F0H

MOV CL,4

SHR AL,CL

MOV DATA2,AL

MOV AL,DATA1

AND AL,0FH

MOV DATA3,AL

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

25. 将4000H、4001H单元的低位送4002H单元的高、低位,一般用于将缓冲区的数据取出拼成一个字节。

源程序:

DATAS SEGMENT

;此处输入数据段代码

ORG 4000H

DATA1 DB 9AH

DATA2 DB 7BH

DATA3 DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

MOV AL,DATA1

AND AL,0FH

MOV CL,4

SHL AL,CL

MOV DATA3,AL

MOV AL,DATA2

AND AL,0FH

ADD DATA3,AL

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果:

实验九、输入输出

26. 在显示器上输出字符串‘HELLO!’

DATAS SEGMENT

;此处输入数据段代码

STRING DB "HELLO!$"

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA DX,STRING

MOV AH,9

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

27. .从键盘输入一组字符串,存入到BUFFER数据区(自己定义)中。

DATAS SEGMENT

;此处输入数据段代码

BUFFER DB 100,0,100 DUP()

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA DX,BUFFER

MOV AH,10

INT 21H

MOV CL,BUFFER+1

XOR CH,CH

ADD DX,CX

MOV BX,DX

MOV BYTE PTR[BX+2],'$'

MOV AH,4CH

INT 21H

CODES ENDS

END START

28. .将内存单元存放的BCD码25H在显示器上输出(即输出字符25)。

DATAS SEGMENT

;此处输入数据段代码

DATA DB 25H

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,DATA

MOV AL,[BX]

AND AL,0F0H

MOV CL,4

SHR AL,CL

ADD AL,30H

MOV DL,AL

MOV AH,2

INT 21H

MOV AL,[BX]

AND AL,0FH

ADD AL,30H

MOV DL,AL

MOV AH,2

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

29. 将内存单元存放的十进制数25从显示器上输出((即输出字符25)。

DATAS SEGMENT

;此处输入数据段代码

DATA DB 25

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,DATA

MOV AL,[BX]

CBW

MOV CL,10

DIV CL

ADD AL,30H

ADD AH,30H

MOV BL,AH

MOV DL,AL

MOV AH,2

INT 21H

MOV DL,BL

MOV AH,2

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

30. 从键盘输入10个个位数字(0~9之间的任意数字),并存储到数据区INPUT中。

DATAS SEGMENT

;此处输入数据段代码

BUFFER DB 20,0,20 DUP()

INPUT DB 10 DUP(0)

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA SI,BUFFER

LEA DI,INPUT

MOV AH,10

INT 21H

MOV CL,BUFFER+1

NEXT:MOV AL,[SI+2]

SUB AL,30H

MOV [DI],AL

INC SI

INC DI

DEC CL

JNZ NEXT

MOV AH,4CH

INT 21H

CODES ENDS

END START

31. 将数据段中的10个个位数数据从显示器上输出。

DATAS SEGMENT

;此处输入数据段代码

DATA DB 1,2,3,4,5,6,7,8,9,0

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,DATA

MOV CX,10

NEXT:MOV AL,[BX]

ADD AL,30H

MOV DL,AL

MOV AH,2

INT 21H

INC BX

DEC CX

JNZ NEXT

MOV AH,2

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

32. 输入任意个字符存到BUFFER数据区(自己定义),输入时以回车作为结束标志。

DATAS SEGMENT

;此处输入数据段代码

BUFFER DB 100,0,100 DUP()

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

LEA BX,BUFFER

MOV AH,10

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验十、子程序

33. 编写8位数求和子程序,并调用它完成10个数的求和程序。

DATAS SEGMENT

;此处输入数据段代码

ARY DB 1,2,3,4,5,6,7,8,9,10

COUNT EQU $-ARY

SUM DB

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

DB 100 DUP()

STACKS ENDS

CODES SEGMENT

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

START:

MOV AX,DATAS

MOV DS,AX

MOV AX,STACKS

MOV SS,AX

;此处输入代码段代码

CALL PROADD

MOV AH,4CH

INT 21H

PROADD PROC NEAR

PUSH AX

PUSH CX

PUSH SI

LEA SI,ARY

MOV CX,COUNT

XOR AL,AL

CLC

NEXT:ADC AL,[SI]

INC SI

DEC CX

JNZ NEXT

XOR SUM,AL

POP SI

POP CX

POP AX

RET

PROADD ENDP

CODES ENDS

END START

华电保定微机原理汇编实验

相关推荐