第三章 80X86指令系统和寻址方式 联系客服

发布时间 : 星期六 文章第三章 80X86指令系统和寻址方式更新完毕开始阅读c74d06136edb6f1aff001f85

(8)。RCL DX,CL (DX)=5CCH (9)。RCR DL,01 (DX)=0DCH 3.28 下列程序段执行后,BX 寄存器内容是什么? MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL 答:(BX)=C02DH 3.29 设数据定义如下:

CONAME DB ‘SPACE EXPLORERS INC。’ PRLINE DB 20 DUP(‘ ’) 用串指令编写程序段分别完成以下功能:

(1)。从左到右把CONAME中的字符串传送到PRLINE。 (2)。从右到左把CONAME中的字符串传送到PRLINE。 (3)。把CONAME第三和第四个字节内容装入AX中。 (4)。把AX寄存器内容存入PRLINE+5开始单元中。 (5)。检查CONAME中有无空格字符,如有传送到BH中。 (6)。编写程序段,把STRING中‘&’字符用空格代替。

解:(1)。从左到右把CONAME中的字符串传送到PRLINE。 Data segment

CONAME DB ‘SPACE EXPLORESINC。’ Count equ $-coname PRLINE DB 20 DUP(‘ ‘) Data ends Code segment

Assume ds:data,es:data,cs:code Start: mov ax,data Mov ds,ax Mov es,ax

MOV SI,OFFSET CONAME MOV DI,OFFSET PRLINE MOV CX,COUNT CLD

REP MOVSB Mov ah,4ch Int 21h Code ends

End start

(1)。从右到左把CONAME中的字符串传送到PRLINE。 Data segment

CONAME DB ‘SPACE EXPLORESINC。’ Count equ $-coname

PRLINE DB 20 DUP(‘ ‘) Data ends Code segment

Assume ds:data,es:data,cs:code Start mov ax,data Mov ds,ax Mov es,ax

MOV SI,OFFSET CONAME+COUNT-1 MOV DI,OFFSET PRLINE+COUNT-1 MOV CX,COUNT STD

REP MOVSB Mov ah,4ch Int 21h Code ends

End start

(3)。把CONAME第三和第四个字节内容装入AX中。 MOV SI,OFFSET CONAME LODSB

MOV AH,AL LODSB

XCHG AH,AL (4)。把AX寄存器内容存入PRLINE+5开始单元中。 MOV DI,OFFSET PRLINE STOSB

MOV AL,AH

STOSB

(5)。检查CONAME中有无空格字符,如有传送到BH中。 MOV DI,OFFSET CONAME MOV CX,COUNT MOV AL,20H CLD

REPNZ SCASB JNZ NEXT

DEC DI

MOV BH,ES:[DI] 。。。。。。 NEXT: 。。。。。。 (6)。编写程序段,把STRING中‘&’字符用空格代替。

Data segment

STRING DB ‘The data is FEB&03 ’ Count equ $-string Data ends Code segment

Assume ds:data,cs:code Start: mov ax,data Mov ds,ax

MOV DI,OFFSET STRING MOV CX,COUNT MOV AL,‘&’ CLD

REPNZ SCASB JNZ NEXT

DEC DI

MOV BYTE PTR[DI],‘ ’ NEXT:Mov ah,4ch Int 21h Code ends

End start

3.31 假设程序中数据定义如下:用串指令分别编写程序段。

(1)。用空格清除PRINT_LINE域。

(2)。在STUDENT_ADDR查找第一个‘—’ (3)。在STUDENT_ADDR查找最后一个‘—’ (4)。如果STUDENT_NAME域全是空格,填入‘*’

(5)。把STUDENT_NAME移到PRINT_LINE前30个字节中,把 STUDENT_ADDR移到PRINT_LINE后9个字节中。

答:(1)。用空格清除PRINT_LINE域。

Data segment

STUDENT_NAME DB 30 DUP(?) STUDENT_ADDR DB 9 DUP(?) PRINT_LINE DB 132 DUP(?)

Data ends

Code segment

Assume cs:code, ds:data,es:data, Start: mov ax,data Mov ds,ax Mov es,ax

MOV DI,OFFSET PRINT_LINE MOV CX,132 MOV AL,‘ ’ CLD

REP STOSB

Mov ah,4ch Int 21h Code ends

End start (2)。在STUDENT_ADDR查找第一个‘—’ Data segment

STUDENT_NAME DB 30 DUP(?)

STUDENT_ADDR DB ‘SPAC——E EXP—LORESI—NC’ Cont equ $-student_addr PRINT_LINE DB 132 DUP(?) Data ends Code segment

Assume cs:code, es:data, Start: mov ax,data Mov es,ax

MOV DI,OFFSET PRINT_LINE MOV CX,CONT MOV AL,‘—’ CLD

REPNZ SCASB JNZ NEXT

MOV DH,[DI-1] NEXT: Mov ah,4ch Int 21h Code ends

End start (3)。在STUDENT_ADDR查找最后一个‘—’