汇编答案(3)

2019-03-10 19:46

and cl, 0fh

〔习题4.4〕编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来。 〔解答〕

getkey: mov ah, 1 ;从键盘输入,出口:al存键值 int 21h

cmp al, 'a' ;判键值是小写字母? jb getkay cmp al, 'z' ja getkay

sub al,20h ;是小写字母转换为大写字母 mov dl,al

mov ah, 02h ;显示 int 21h

编程实现把键入的一个字符,用二进制形式(0 / 1)显示出它的ASCII代码值。 〔解答〕 .model small .stack 256 .data

stri1 db 'please input',0dh,0ah,'$' .code .startup

mov dx,offset stri1 mov ah,09h int 21h

mov ah, 01h int 21h mov cx, 8 again: xor dl,dl shl al, 1 adc dl, '0' mov ah,02h int 21h loop again .exit 0

end

〔习题4.17〕编写程序,要求从键盘接收一个数bellN(0 ~ 9),然后响铃bellN次。 〔解答〕

.model small .stack .data

stri1 db 'please input number:1--9',0dh,0ah,'$' .code

.startup

again: mov dx,offset stri1 ;显示stri1,提示输入 mov ah,09h int 21h

mov ah,01h ;调用输入一个字符 int 21h ;输入一个字符存在al中 cmp al, '1' ;判该字符,如不在?1?--?9? jb again ;重新输入 cmp al, '9' ja again

and al,0fh ;在?1?--?9?,屏蔽高4位 mov cl, al ;振铃次数送cx xor ch,ch

abc: mov dl, 07h ;调用一次振铃 mov ah, 02h int 21h loop abc .exit 0

end

〔习题4.18〕编写程序,将一个包含有20个有符号数据的数组arrayM分成两个数组:正数数组arrayP和负数数组arrayN,并分别把这两个数组中的数据个数显示出来。 〔解答〕

.model small include io.inc .stack .data

arrayM db 1,2,3,4,5,6,0,-3,-5,-6,0,7,6,90,-18,-23,34,7,9,8 ;源数组 arrayP db 20 dup(?) ;正数数组 arrayN db 20 dup(?) ;负数数组 dispP db 'Plus Number: ','$'

dispN db 0dh,0ah,'Negs Number: ','$' .code .startup

mov cx, 20 ;源数组元素数

xor bx, bx ;设bh为正数个数,bl为负数个数,均清零 xor si, si ;源数组地址位移量 again: ;循环20次 mov ax, arrayM[si] ;取一个元素 cmp ax,0 ;判正数

jl Neg

inc bh ;是,正数个数加1 jmp next

Neg: inc bl ;否,负数个数加1 next: inc si ;修改位移量 loop again ;循环次数减1

mov ah,09h ;调用显示字符串功能 mov dx, offset dispP ;显示个数 int 21h mov al,bh

call dispuib ; 调用I/O子程序库中的子程序 mov ah,09h ;调用显示字符串功能 mov dx, offset dispN ;显示个数 int 21h mov al,bl

call dispuib ; 调用I/O子程序库中的子程序 .exit 0

end

〔习题4.19〕编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示?overflow?。 〔解答〕

.model small .stack .data num equ 100 wlist dw num dup(?) wordsum dw ? error db 'overflow. $' .code .startup

mov bx,offset wlist mov cx,num xor ax,ax again: add ax,[bx] jc next inc bx inc bx loop again mov [bx],ax jmp done

next: mov dx,offset error mov ah,9 int 21h done: .exit 0 end

4-28写一个子程序,根据入口参数AL=0/1/2,分别实现对大写字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在string中,用0表示结束。〔解答〕

Change proc

Push bx ;保护bx xor bx, bx ;位移量清零

cmp al,0 ;根据入口参数AL=0/1/2,分别处理 jz chan_0 dec al jz chan_1 dec al jz chan_2 jmp done

chan_0: mov al,string[bx] ;实现对大写字母转换成小写 cmp al,0 jz done

cmp al,?A? ;是大写字母 jb next0

cmp al,?Z? ;是大写字母 ja next0

add al, 20h ;转换 mov string[bx], al

next0: inc bx ;位移量加1,指向下一字母 jmp chan_0

chan_1: mov al,string[bx] ;实现对小写字母转换成大写 cmp al,0 jz done

cmp al,?a? ;是大写字母 jb next1

cmp al,?z? ;是大写字母 ja next1

sub al, 20h ;转换 mov string[bx], al

next0: inc bx ;位移量加1,指向下一字母

jmp chan_1

chan_2: mov al,string[bx] ;实现对大写字母转换成小写 cmp al,0 jz done

cmp al,?A? ;是大写字母 jb next2

cmp al,?Z? ;是大写字母 ja next20

add al, 20h ;转换 jmp next2

next20: cmp al,?a? ;是大写字母 jb next2

cmp al,?z? ;是大写字母 ja next2

sub al, 20h ;转换 mov string[bx], al

next2: inc bx ;位移量加1,指向下一字母 jmp chan_2

done: pop bx ;恢复bx ret change endp


汇编答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:专职安全员安全生产重点复习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: