汇编语言练习题2 下载本文

NEW_ADDRESS:

…比较字符串OLDS和NEWS是否相同,若不相同则转到NEW_ADDRESS执行,否则转到

OLD_ADDRESS

14. MOV CX, L LEA DI, ARRAY MOV AL, 20H CLD

REPNE SCASB

JNZ NOT_FOUND …NOT_FOUND:

…试回答上述程序段完成的功能是什么?

在长度为L的字符串ARRAY中查找空格,若有空格在顺序执行,否则转向NOT_FOUND。 六、计算题(共2小题)

1. 将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少? 二进制为 01100100B,十六进制为64H 2. 假设(DS)=0C00H,(BX)=0210H,对于指令MOV DS:100H[BX],AL,其目的操作

数的物理地址为多少?

EA = (BX)+0100H = 0310H,物理地址 = 0C000H + 0310H = 0C310H 七、程序设计题(共4题)

1. 试编写一程序片段,实现BL高4位与低4位相互交换 MOV CL, 4 ROL BL, CL

2. 试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2的功能(AX中的

数据理解为补码) MOV BX, AX MOV CL, 2 SAL AX, CL ADD AX, BX ADD AX, 14 SAR AX, 1

3. D1 DW ?, ? D2 DW ?, ?

定义了两个双精度数。编写一条宏定义DSUB,完成双精度数D1 减去双精度数D2,差存放在D2中,两个双精度数为变元。 DSUB MACRO D1,D2

MOV AX, D1 MOV DX, D1+2 SUB AX, D2 SBB DX, D2+2 MOV D2, AX MOV D2+2, DX ENDM

- 11 -

DNEG MACRO D1,D2 MOV EAX, D1 SUB EAX, D2 MOV D2, EAX ENDM

4.现有下列数据段:

DATA SECMENT

STR1 DB ‘ABCDEFGHIJKL’ COUNT EQU $—STR1

BUF DB COUNT DUP (0) DATA ENDS

试用串指令编写一个完整的程序:实现把STR1中所有字符逆向传送到BUF缓冲区(即STR1中第一个字符送到BUF的最后一个单元,STR1中最后一个字符送到BUF的第一个单元)。

DATA SECMENT

STR1 DB ‘ABCDEFGHIJKL’ COUNT EQU $—STR1

BUF DB COUNT DUP (0) DATA ENDS CODE SEGMENT

ASSUME CD:CODE, DS:DATA,ES:DATA START: MOV AX, DATA MOV DS, AX MOV ES,AX

LEA SI, BUF—1 LEA DI, BUF

MOV CX, COUNT

CLD STD

或 LOP: MOVSB LOP: MOVSB

SUB SI, 2 ADD DI, 2 LOOP LOP LOOP LOP MOV AH, 4CH INT 21H CODE ENDS END START

- 12 -