(3) MOV (4) MOV (5) MOV CLD
AX, WORD PTR CONAME+3-1 WORD PTR PRLINE +5, AX
AL, ‘ ’ ;空格的ASCII码送AL寄存器
MOV DI, SEG CONAME MOV ES, DI LEA DI, CONAME REPNE SCASB JNE NEXT DEC
DI
MOV BX, DI NEXT: ┇ 3.30
编写程序段,把字符串STRING中的‘&’字符用空格符代替。
STRING DB ‘The date is FEB&03’ 答:程序段如下: MOV CX, 18 MOV AL, ‘&’ CLD
MOV DI, SEG STRING MOV ES, DI LEA DI, STRING
REPNE SCASB JNE NEXT DEC
DI
MOV ES:BYTE PTR [DI], ‘ ’ ;送空格符 NEXT: ┇ 3.31
假设数据段中数据定义如下:
30 DUP (?) 9 DUP (?)
STUDENT_NAME DB STUDENT_ADDR PRINT_LINE DB
DB
132 DUP (?)
分别编写下列程序段: (1) 用空格符清除PRI
NT_LINE域。 (2) 在STUDENT_ADDR中查找第一个‘-’。 (3) 在STUDENT_ADDR中查找最后一个‘-’。
(4) 如果STUDENT_NAME域中全是空格符时,填入‘*’。
(5) 把STUDENT_NAME移到PRINT_LINE的前30个字节中,把STUDENT_ ADDR移到PRINT_LINE的后9个字节中。 答:公共的程序段如下: MOV DI, DS
MOV ES, DI (1) MOV
CX, 132
MOV AL., ‘ ’ ;空格的ASCII码送AL寄存器 CLD
LEA DI, PRINT_LINE REP STOSB (2) MOV
CX, 9
MOV AL., ‘-’ CLD
LEA DI, STUDENT_ ADDR REPNE SCASB JNE NO_DASH DEC
DI
NO_DASH: ┇ (3) MOV
CX, 9
MOV AL., ‘-’ STD
LEA DI, STUDENT_ ADDR ADD
DI, 9-1
REPNE SCASB JNE NO_DASH INC DI
NO_DASH: ┇ (4) MOV
CX, 30
MOV AL, ‘ ’ ;空格的ASCII码送AL寄存器 CLD
LEA DI, STUDENT_NAME REPE SCASB JNE NEXT MOV CX, 30
MOV AL, ‘*’ ;“*”的ASCII码送AL寄存器 LEA DI, STUDENT_NAME REP STOSB NEXT: ┇ (5) MOV CLD
LEA SI, STUDENT_NAME LEA DI, PRINT_LINE REP MOVSB MOV CX, 9 STD
LEA SI, STUDENT_ADDR+9-1 LEA DI, PRINT_LINE+132-1 REP MOVSB
CX, 30
3.32 编写一程序段:比较两个5字节的字符串OLDS和NEWS,如果OLDS
字符串不同于NEWS字符串则执行NEW_LESS;否则顺序执行程序。 答:程序段如下: MOV CX, 5 CLD
MOV DI, SEG OLDS MOV DS, DI MOV ES, DI LEA SI, OLDS LEA DI, NEWS REPE CMPSB JNE NEW_LESS ┇
NEW_LESS: ┇ 3.33
假定AX和BX中的内容为带符号数,CX和DX中的内容为无符号数,
请用比较指令和条件转移指令实现以下判断:
(1) 若DX的内容超过CX的内容,则转去执行EXCEED。 (2) 若BX的内容大于AX的内容,则转去执行EXCEED。 (3) 若CX的内容等于0,则转去执行ZERO。
(4) BX与AX的内容相比较是否产生溢出?若溢出则转OVERFLOW。 (5) 若BX的内容小于等于AX的内容,则转EQ_SMA。 (6) 若DX的内容低于等于CX的内容,则转EQ_SMA。