汇编 - 总练习

更新时间:2023-12-22 11:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. 设 (DS)=1000H, (ES)=2000H, (SS)=3000H, (BX)=100H, (SI)=200H, (DI)=300H, (BP)=400H。请指出下列各条指令中目的操作数是什么寻址方式?并说明物理地址是多少?(实方式) (1) SUB [BP], BX (2) MOV [BX+DI], SI (3) ADD ES:[SI], DI (4) MOV 10[BX], DI (5) MOV DS:[100H], BX

2. 判断下列指令是否有错误。对于错误指令,说明错误原因。 (1) MOV DS, DX (2) MOV [CX], BX (3) PUSH CL

(4) SBB 10[SI][DI], AX (5) MOV BYTE PTR [BX] , ‘0’ (6) MOV CS, AX (7) MUL 10

(8) LEA POIN, BUFW (9) ADD DI, CH

3. 数据段定义如下:

DATA SEGMENT A DW 1234H, D+7 B DB 2 DUP (‘4’,5) C EQU $ - B D DB 6, ‘123’ E DD B DATA ENDS

以字节为单位,画该数据段存储示意图,同时在图的左边标明各变量所在的位置。(设DATA段的段址为2000H, A的偏移地址为 0000H). C的值是多少?

A ???????????

4. 依次执行如下程序段中的各指令,指出每一条指令执行后,AX中的十六进制内容是什么? MOV AX, 1234H (AX) = SAL AX, 1 (AX) = AND AL, 0FH (AX) = ADD AX, 1000H (AX) = ROR AX, 1 (AX) = XCHG AH, AL (AX) = INC AH (AX) = TEST AX, 8000H (AX) =

5. 执行下列指令后,各寄存器的内容是什么? NUMW DW 3, -5, 7, -9

(NUMW 所在段的段址已在DS中,NUMW的偏移地址为 0000H) LEA BX, NUMW MOV AX, [BX] MOV CX, 3[BX] MOV DX, NUMW + 4

(AX) = (BX) = (CX) = (DX) =

6. 执行如下程序段: MOV AL, 2 MOV CL, -2 MUL CL

执行完后 (AX) =

若将最后一个指令换成 IMUL CL, 则 (AX) =

7. 设 (AX)= 3456H, (BX) = 6321H, 执行指令 ADD AX, BX 后,

CF= OF= ZF = SF =

8. 指出如下程序段的功能 OR AX, AX JNS L1 NEG AX

L1:

9. 如下程序段的功能是什么?设 STR1的偏移地址为 0000H,

程序段执行结束时, (SI) 是多少? LEA SI, STR1 LEA DI, STR2 MOV CX, 20

CLD REP MOVSB

10. 指出如下程序段的功能。

MOV AH, 1 INT 21H CMP AL, ‘A’ JB LN CMP AL, ‘Z’ JA LN MOV DL, ‘Y’ JMP DISPLAY

LN: MOV DL, ‘N’ DISPLAY : MOV AH, 2

INT 21H

11. 编写一个名为 MY_DATA的数据段,依次定义如下变量:

A 为双字类型的变量,初值为 12345678H B 为字变量,初值为 100

C 为字符串变量,初值为 COMPUTER.

12. 设一个数据段中定义了字节类型的变量STR,请分别使用规定的寻址方式,将STR+2单元中的内容送入BH,将STR+6单元中的内容送入 BL(假设该段的段首址已在DS中)

(1) 直接寻址

(2) 寄存器间接寻址

(3) 寄存器变址寻址

13. 写指令段完成如下功能:从端口号为 378H的寄存器中读入一个字数据。

14. 已知在字单元 NUMW 中存放一个字数据,下列程序段

统计该数据中1的个数,并将统计结果存入字节单元STR中。 NUMW DW 72H STR DB 0

??

MOV BL, 0 MOV AX, [SI] LP1: AND AX, AX LP2 SHL AX, 1 LP1 INC BL JMP LP1 LP2: ?..

15. 已知在 以 BUF 为首址的字节存储区中,存放着一个以

0DH为结束标志的字符串,试用9号功能调用显示输出该字符串。

MOV AX, SEG BUF MOV DS, AX LEA BX, BUF LOP:

CMP AH, 0DH JMP LOP LOP1:

MOV AH, 9 INT 21H

16. 已知如下宏定义:

R_W MACRO ADDR, FUNC_NO

MOV BX., SEG ADDR MOV DS, BX LEA DX, ADDR MOV AH, FUNC_NO INT 21H ENDM

写出 “R_W BUF, 10” 的宏扩展。

17. 设 (CS)= 0B92H, (SP)=2000H, 标号 LP的偏移地址为 0012H, 子程序 PROC1 所在段的段首址为 0D95H, 其入口的偏移地址为 0022H.

执行 CALL FAR PTR PROC1 LP:

画出执行 CALL 指令后的堆栈示意图,并指出 (CS), (IP) (SP) 各是多少?

18. 已知在buf 缓冲区中存放着 大小在0 ~ 100之间的数。

有一程序试图统计并显示其中小于60的数据个数。问程序是否实现了该功能?显示的结果是多少?如未实现该功能,请说明原因,并修改修改程序段,实现之。 buf dw 75, 84, 48, 89, 55 , 67

N =6

mov dl, 0 mov bx, 0

mov cx, 6 lopa:cmp buf[bx], 60 jae l1 inc dl l1: inc bx loop lopa add dl, 30h mov ah,2

Int 21h

19. 执行如下程序段后,(AL)= ?

buf db 41H, 42H, 43H, 44H, 45H

LEA BX, BUF MOV AL, 3 XLAT

20. 以字变量BUF为首址的存储单元中存放了数量不超过100的有符号数;下列程序段统计了其中正数(含0)和负数的个数,并分别存放到BL,BH中。 DATA SEGMENT

BUF DW -1,10,5,0FF12H,8789H,COUNT EQU DATA ENDS

??

AND BX,

LEA SI,BUF MOV CX,COUNT

AA:CMP ,0 INC BL

BB:INC BH CC:ADD SI,2

??21、RADIX是一个将AX中的十六位无符号二进制数转换成由BX内容指定的不大于10进制的数的子程序。它将所求的各位数字的ASCII码按高位在前、低位在后的顺序存放在以DI为指针的字节存取区中。

RADIX PROC

PUSH CX PUSH DX MOV CXR1:

DIV BX PUSH DX INC CX CMP JNE R1

R2:

ADD AL MOV [DI] INC DI LOOP R2

POP CX RET RADIX ENDP

,0 ,30H ,AL ,0 22. 编写完整的程序:设在以BUF 为首址的字存储区中存储了多个有符号数,试编写一完整的程序,求出其中所有正数的和,存放到 P_SUM 字存储区中,并将其中所有的负数,依次存放到NEG_BUF为首址的字存储区中。

23. 分析思考

已知某次上机题为:从键盘输入一个字符,若为大写字母A则显示输出“ASSEMBLY LANGUAGE.”; 若为大写字母P则显示输出“PASCAL LANGUAGE.”; 若为大写字母Q则程序退出;若为其他键则显示输出“OTHERS.”。这三种信息在屏幕上应单独占一行。

某学生编写源程序后,用MASM(V6.)和LINK将源程序转换成可执行程序。执行后发现: (1) 当按下A时,屏幕上显示如下: A

ASSEMBLY LANGUAGE.OTHERS.

(2)接着按P时,上述第二行的内容又变成了: PASCAL LANGUAGE.E.OTHERS.P

该学生修改了数据段定义后就达到了题目的要求。请按实验报告的要求书写一份实验报告。并回答:对修改前的程序,如果完成上述(1)(2)操作之后,按下字母B ,屏幕上显示的信息是怎样的?

24 设一个程序由两个模块MAIN.ASM 和 SUBP.ASM组成。 MAIN.ASM 程序如下: .386

EXTRN CONVERT:NEAR

_________________________________ STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS

DATA SEGMENT USE16 RESULT DB 200 DUP(0) TAB DB 'ABCDEFGHIJ' DATA ENDS

CODE SEGMENT USE16 PARA PUBLIC ‘CODE’ ASSUME CS:CODE, DS:DATA, SS:STACK BEGIN: MOV AX, DATA MOV DS, AX MOV BX, 0 LEA DI, RESULT NEXT: MOV AH, 1 INT 21H CMP AL, 0DH JE EXIT

CALL CONVERT MOV [DI], AL INC DI JMP NEXT EXIT: MOV AH, 4CH INT 21H CODE ENDS

END BEGIN

第二个程序模块 SUBP.asm, 如下: .386

PUBLIC CONVERT

__________________________________________________ CODE SEGMENT ___________________________________ ASSUME CS:CODE CONVERT PROC PUSH BX LEA BX, TAB CMP AL, '0' JB L_RET CMP AL, '9' JA L_RET SUB AL, 30H

XLAT L_RET: POP BX RET CONVERT ENDP CODE ENDS END

(1)填写程序中的划线行,使得程序完整 (2)程序的功能是什么?

(3)使用TD.EXE调试该程序时,如果想单步执行子程序CONVERT中的指令,问执行哪些操作后,可以使得IP为子程序的第一条指令的有效地址?进入子程序后,执行何操作,可以单步执行各语句?

(4)如果将子程序CONVERT中语句“POP BX”去掉,程序的功能有改变,为什么?

本文来源:https://www.bwwdw.com/article/x0p5.html

Top