IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明)) 联系客服

发布时间 : 星期一 文章IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明))更新完毕开始阅读6b4d9d5d804d2b160b4ec062

JNZ COMP

DONE: MOV CH, 4 ;将次数转换为16进制数的ASCII码 MOV CL, 4

LEA BX, DAT ;转换结果存入DAT单元中 DONE1: ROL AX, CL MOV DX, AX

AND DL, 0FH ;取一位16进制数 ADD DL, 30H CMP DL, 39H JLE STORE

ADD DL, 07H ;是“A~F”所以要加7

STORE: MOV [BX], DL ;转换结果存入DAT单元中 INC BX DEC CH JNZ DONE1

DISPLAY: LEA DX, DISP ;显示字符串程序(将DISP和DAT一起显示) MOV AH, 09H INT 21H RET MAIN ENDP

CSEG ENDS ;以上定义代码段

--------------------------------------------------------------------------

END START

5.11 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。 答:程序段如下: DSEG SEGMENT

BUFF DB 50 DUP (‘ ’) COUNT DW 0 DSEG ENDS ┇

BEGIN: LEA BX, BUFF MOV COUNT, 0

INPUT: MOV AH, 01 ;从键盘输入一个字符的功能调用 INT 21H MOV [BX], AL INC BX

CMP AL, ‘$’ ;是$结束符吗? JNZ INPUT ;不是,继续输入

LEA BX, BUFF ;对非数字字符进行计数 NEXT: MOV CL, [BX] INC BX

CMP CL, ‘$’ ;是$结束符,则转去显示 JZ DISP

CMP CL, 30H ;小于0是非数字字符 JB NEXT

CMP CL, 39H ;大于9是非数字字符 JA NEXT

INC COUNT ;个数+1 JMP NEXT

DISP: ┇ ;16进制数显示程序段(省略)

5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。 答:程序如下: DSEG SEGMENT MEM DW 100 DUP (?) DSEG ENDS

-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX MOV AX, DSEG

MOV DS, AX ;给DS赋值

BEGIN: MOV SI, (100-1)*2 ;(SI)指向MEM的末元素的首地址 MOV BX, -2 ;地址指针的初值 MOV CX, 100

COMP: ADD BX, 2 CMP MEM [BX], 0 JZ CONS LOOP COMP

JMP FINISH ;比较完了,已无0则结束 CONS: MOV DI, BX

CONS1: CMP DI, SI ;到了最后单元码? JAE NOMOV

MOV AX, MEM [DI+2] ;后面的元素向前移位 MOV MEM [DI], AX ADD DI, 2 JMP CONS1

NOMOV: MOV WORD PTR [SI], 0 ;最后单元补0 LOOP COMP FINISH: RET MAIN ENDP

CSEG ENDS ;以上定义代码段

-------------------------------------------------------------------------- END START

5.13 在STRING到STRING+99单元中存放着一个字符串,试编制一个程序测试该字符串中是否存在数字,如有则把CL的第5位置1,否则将该位置0。 答:程序如下: DSEG SEGMENT