好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

第五章

5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出 来。

答:程序段如下:

BEGIN: MOV AH, 1 ;从键盘输入一个字符的 DOS调用 INT 21H

CMP AL, ‘a’ ;输入字符 <‘a’吗? JB STOP

CMP AL, ‘z’ ;输入字符 >‘z’吗? JA STOP

SUB AL, 20H ;转换为大写字母,用 AND AL, 1101 1111B 也可 MOV DL, AL ;显示一个字符的 DOS调用 MOV AH, 2 INT 21H JMP BEGIN STOP: RET

5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符, 再按顺序显示这三个字符。 答:程序段如下:

BEGIN: MOV AH, 1 ;从键盘输入一个字符的 DOS调用 INT 21H

CMP AL, ‘a’ ;输入字符 <‘a’吗? JB STOP

CMP AL, ‘z’ ;输入字符 >‘z’吗?

JA STOP

DEC AL;得到前导字符

MOV DL, AL ;准备显示三个字符 MOV CX, 3

DISPLAY: MOV AH, 2 ;显示一个字符的 DOS调用 INT 21H INC DL

LOOP DISPLAY STOP: RET

5.3 将 AX寄存器中的 16 位数分成 4 组,每5.4AL、BL、CL和 DL中。 答:程序段如下: DSEG SEGMENT STORE DB 4 DUP (?) DSEG ENDS ┇

BEGIN: MOV CL, 4 ;右移四次 MOV CH, 4 ;循环四次 LEA BX, STORE A10: MOV DX, AX

AND DX, 0FH ;取 AX的低四位 MOV [BX], DL ;低四位存入 STORE中 INC BX

SHR AX, CL ;右移四次

组 4 位,然后把这四组数分别 在放DEC CH

JNZ A10 ;循环四次完了码?

B10: MOV DL, STORE;四组数分别放在 AL、BL、CL和 DL中 MOV CL, STORE+1 MOV BL, STORE+2 MOV AL, STORE+3 STOP: RET

5.5 试编写一程序, 要求比较两个字符串 STRING1和STRING2所含字符是否完全 相同,若相同则显示‘ MATC’H, 若不相同则显示‘ NO MATC’H。 答:程序如下: DSEG SEGMENT

STRING1 DB‘I am a student. STRING2 DB‘I am a student!

’ ’

YES DB‘MATC’H , 0DH, 0AH, ‘$’ NO DB‘NO MATC’H, 0DH, 0AH, ‘$’ DSEG ENDS

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

CSEG SEGMENT MAIN PROC FAR

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

MOV AX, DSEG

MOV DS, AX;给 DS赋值 MOV ES, AX;给 ES赋值 ;

BEGIN: LEA SI, STRING1 ;设置串比较指令的初值 LEA DI, STRING2 CLD

MOV CX, STRING2 - STRING1 REPE CMPSB;串比较 JNE DISPNO

LEA DX, YES ;显示 MATCH JMP DISPLAY

DISPNO: LEA DX, NO ;显示 NO MATCH

DISPLAY: MOV AH, 9 ;显示一个字符串的 DOS调用 INT 21H RET MAIN ENDP

CSEG ENDS;以上定义代码段

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

5.6 试编写一程序,要求能从键盘接收一个个位数 N,然后响铃 N次( 响铃的 ASCII 5.7码为 07)。 答:程序段如下:

BEGIN: MOV AH, 1 ;从键盘输入一个字符的 DOS调用 INT 21H SUB AL, ‘0’

JB STOP;输入字符 <‘0’吗? CMP AL, 9 ;输入字符 >‘9’吗? JA STOP CBW

MOV CX, AX;响铃次数 N JCXZ STOP

BELL: MOV DL, 07H ;准备响铃

MOV AH, 2 ;显示一个字符的 DOS调用,实际为响铃 INT 21H

CALL DELAY100ms;延时 100ms LOOP BELL STOP: RET

5.8 编写程序,将一个包含有 20个数据的数组 M分成两个数组:正数数组负数数组 N,并分别把这两个数组中数据的个数显示出来。 答:程序如下: DSEG SEGMENT COUNT EQU 20

ARRAY DW 20 DUP (?);存放数组 COUNT1 DB 0;存放正数的个数 ARRAY1 DW 20 DUP (?);存放正数 COUNT2 DB 0;存放负数的个数

和 P

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

第五章5.1试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答:程序段如下:BEGIN:MOVAH,1;从键盘输入一个字符的DOS调用INT21HCMPAL,‘a’;输入字符<‘a’吗?JBSTOPCMPAL,‘z’;输入字符>‘z’吗?JASTOP
推荐度:
点击下载文档文档为doc格式
6b68m42l1d02tjb2ixwe3xy6q955p4014sy
领取福利

微信扫码领取福利

微信扫码分享