新版汇编语言程序设计【课后习题答案】-钱晓捷-主编-电子工业出版社_第1页
新版汇编语言程序设计【课后习题答案】-钱晓捷-主编-电子工业出版社_第2页
新版汇编语言程序设计【课后习题答案】-钱晓捷-主编-电子工业出版社_第3页
新版汇编语言程序设计【课后习题答案】-钱晓捷-主编-电子工业出版社_第4页
新版汇编语言程序设计【课后习题答案】-钱晓捷-主编-电子工业出版社_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新版汇编语言程序设计【课后习题答案】钞票晓捷主编电子工业出版社第2章8086的指令系统〔全〕

第2章8086的指令系统

〔习题2.1〕DS=2000H、BX=0100H、SI=0002H,存储单元[20210H]~[20213H]依次存放12345678H,[21200H]~[21203H]依次存放2A4CB765H,讲明以下每条指令执行完后AX存放器的内容。〔1〕movax,1200h〔2〕movax,bx〔3〕movax,[1200h]〔4〕movax,[bx]〔5〕movax,[bx+1100h]〔6〕movax,[bx+si]〔7〕movax,[bx][si+1100h]〔解答〕〔1〕AX=1200H〔2〕AX=0100H〔3〕AX=4C2AH

;偏移地址=bx=0100h〔4〕AX=3412H

;偏移地址=bx=0100h〔5〕AX=4C2AH

;偏移地址=bx+1100h=1200h〔6〕AX=7856H

;偏移地址=bx+si=0100h+0002h=0102h〔7〕AX=65B7H

;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h

〔习题2.2〕指出以下指令的错误〔1〕movcx,dl〔2〕movip,ax〔3〕moves,1234h〔4〕moves,ds〔5〕moval,300〔6〕mov[sp],ax〔7〕movax,bx+di〔8〕mov20h,ah〔解答〕〔1〕两操作数类型不匹配〔2〕IP指令指针禁止用户访咨询〔3〕立即数不准许传给段存放器〔4〕段存放器之间不准许传送〔5〕两操作数类型不匹配〔6〕目的操作数应为[SI]〔7〕源操作数应为[BX+DI]

〔8〕立即数不能作目的操作数

〔习题2.3〕数字0~9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址〔设为200H〕的连续区域中。请为如下程序段的每条指令加上注释,讲明每条指令的功能和执行结果。leabx,tablemoval,8xlat〔解答〕leabx,table

;猎取table的首地址,BX=200Hmoval,8

;传送欲转换的数字,AL=8xlat

;转换为格雷码,AL=12H

P35

〔习题2.4〕什么是堆栈,它的工作原那么是什么,它的全然操作有哪两个,对应哪两种指令?〔解答〕堆栈是一种按“先进后出〞原那么存取数据的存储区域,位于堆栈段中,使用SS段存放器记录其段地址;它的工作原那么是先进后出;堆栈的两种全然操作是压栈和出栈,对应的指令是PUSH和POP。

〔习题2.5〕SS=2200H、SP=00B0H,画图讲明执行下面指令序列时,堆栈区和SP的内容如何变化?movax,8057hpushaxmovax,0f79h

pushaxpopbxpop[bx]〔解答〕movax,8057hpushaxmovax,0f79hpushaxpopbx

;bx=0f79hpop[bx]

;DS:[0f79h]=8057h〔习题2.6〕给出以下各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:moval,89haddal,aladdal,9dhcmpal,0bchsubal,aldecalincal〔解答〕moval,89h

;AL=89h

CF

ZF

SF

OF

PFaddal,al

;AL=12h

1

0

0

1

1;10001001+10001001100010010addal,9dh

;AL=0afh

0

0

1

0

1;00010010+1001110110101111cmpal,0bch

;AL=0afh

1

0

1

0

1;10101111-10111100*01000011subal,al

;AL=00h

0

1

0

0

1decal

;AL=0ffh

0

0

1

0

1;00000000-00000001

*11111111incal

;AL=00h

0

1

0

0

1;11111111+00000001*11111111〔习题2.7〕设X、Y、Z均为双字数据,分不存放在地址为X、X+2;Y、Y+2;Z、Z+2的存储单元中,它们的运算结果存进W单元。阅读如下程序段,给出运算公式。movax,Xmovdx,X+2addax,Yadcdx,Y+2addax,24adcdx,0subax,Zsbbdx,Z+2movW,ax

movW+2,dx〔解答〕W=X+Y+24-Z

〔习题2.8〕请分不用一条汇编语言指令完成如下功能:〔1〕把BX存放器和DX存放器的内容相加,结果存进DX存放器。〔2〕用存放器BX和SI的基址变址寻址方式把存储器的一个字节与AL存放器的内容相加,并把结果送到AL中。〔3〕用BX和位移量0B2H的存放器相对寻址方式把存储器中的一个字和CX存放器的内容相加,并把结果送回存储器中。〔4〕用位移量为0520H的直截了当寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。〔5〕把数0A0H与AL存放器的内容相加,并把结果送回AL中。〔解答〕〔1〕ADDDX,BX〔2〕ADDAL,[BX+SI]〔3〕ADD[BX+0B2H],CX〔4〕ADDWORDPTR[0520H],3412H〔5〕ADDAL,0A0H

〔习题2.9〕设X、Y、Z、V均为16位带符号数,分不装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并讲明运算结果存于何处。movax,X

;ax=XimulY

;DX.AX=X*Ymovcx,ax

;cx=X*Y的低16位moxbx,dx

;bx=X*Y的高16位movax,Z

;ax=Zcwdaddcx,ax

;cx=Z的低16位+X*Y的低16位adcbx,dx

;bx=Z的高16位+X*Y的高16位+低位进位subcx,540

;cx=Z的低16位+X*Y的低16位-540sbbbx,0

;bx=Z的高16位+X*Y的高16位+低位进位-低位借位movax,V

;ax=Vcwdsubax,cx

;ax=V的低16位-〔Z的低16位+X*Y的低16位-540〕sbbdx,bx

;dx=V的高16位-〔Z的高16位+X*Y的高16位+低位进位-低位借位〕-低位借位idivX;/X〔解答〕[V-(X*Y+Z-540)]/XAX存商,DX存余数

〔习题2.10〕指出以下指令的错误:〔1〕xchg[si],30h〔2〕popcs〔3〕sub[si],[di]〔4〕pushah〔5〕adcax,ds〔6〕add[si],80h〔7〕inal,3fch〔8〕outdx,ah〔解答〕〔1〕xchg的操作数不能是立即数〔2〕不应对CS直截了当赋值〔3〕两个操作数不能根基上存储单元〔4〕堆栈的操作数不能是字节量〔5〕adc的操作数不能是段存放器〔6〕没有确定是字节依旧字操作〔7〕in不支持超过FFH的直截了当寻址〔8〕out只能以AL/AX为源操作数

〔习题2.11〕给出以下各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。movax,1470handax,axorax,axxorax,axnotaxtestax,0f0f0h〔解答〕

movax,1470h

;AX=1470HCF

ZF

SF

OF

PFandax,ax

;AX=1470H0

0

0

0

0orax,ax

;AX=1470H0

0

0

0

0xorax,ax

;AX=0000H0

1

0

0

1notax

;AX=FFFFH0

1

0

0

1testax,0f0f0h

;AX=FFFFH0

0

1

0

1注重:MOV和NOT指令不碍事标志位;其他逻辑指令使CF=OF=0,依据结果碍事其他标志位。

〔习题2.12〕假设例题2.32的程序段中,AX=08H,BX=10H,请讲明每条指令执行后的结果和各个标志位的状态。〔解答〕指令

;执行结果

CFOFSFZFPFmovsi,ax

;SI=AX=0008H

-

-

-

-

-shlsi,1

;SI=2*AX=0010H

0

0

0

0

0addsi,ax

;SI=3*AX=0018H

0

0

0

0

1movdx,bx

;DX=BX=0010H

0

0

0

0

1movcl,03h

;CL=03H

0

0

0

0

1shldx,cl

;DX=8*BX=0080H

0

u

0

0

0subdx,bx

;DX=7*BX=0070H

0

0

0

0

0adddx,si

;DX=7*BX+3*AX=0088H

0

0

0

0

1注重:逻辑左移N次相当于无符号整数乘以2的N次方,逻辑右移N次相当于无符号整数除以2的N次方。移位指令依据移位的数据设置CF,依据移位后的结果碍事SF,ZF,PF。在进行一位移位时,依据最高符号位是否改变设置OF,如改变那么OF=1。另外,程序注释用“u〞表示标志无定义〔不确定〕,“-〞表示无碍事。

〔习题2.13〕编写程序段完成如下要求:〔1〕用位操作指令实现AL〔无符号数〕乘以10〔2〕用逻辑运算指令实现数字0~9的ASCII码与非压缩BCD码的互相转换〔解答〕〔1〕

;不考虑进位

movbl,almovcl,3shlal,cl

;*8addal,bl

;shlbl,1

addal,bl;考虑进位xorah,ahmovbx,axmovcl,3shlax,claddax,bx

;shlbx,1addax,bx〔2〕数字0~9的ASCII码是:30h~39h非压缩BCD码的0~9是:00h~09h方法一:andal,0fh

;实现ASCII到非压缩BCD码的转换oral,30h

;实现非压缩BCD码到ASCII的转换方法二:xoral,30h

;求反D5D4位,其他不变;即高4位为3,那么变为0;高4位为0,那么变为3〔3〕movcl,4again:

shrdx,1

;实现逻辑右移

;采纳“sardx,1〞,那么实现算术右移

rcrax,1

deccljnzagain

〔习题2.14〕AL=F7H〔表示有符号数-9〕,分不编写用SAR和IDIV指令实现的除以2的程序段,并讲明各自执行后,所得的商是什么?〔解答〕〔1〕用sar编写moval,0f7h

;-9送AL11111001saral,1

;结果:AL=11111100B=0FBH

即-5〔2〕用idiv编写moval,0f7h

;-9送alcbw

;字节符号扩展位字movbl,2

;注重除数不可为立即数idivbl

;结果:商为al=fch

(-4);余数:ah=ffh(-1)结论:符号数的除法用idiv正确。

〔习题2.15〕数据段500h~600h处存放了一个字符串,讲明以下程序段执行后的结果:movsi,600hmovdi,601hmovax,dsmoves,axmovcx,256stdrepmovsb〔解答〕

〔习题2.16〕讲明以下程序段的功能cldmovax,0fefhmovcx,5movbx,3000hmoves,bxmovdi,2000hrepstosw〔解答〕

将es:di(即3000:2000h或32000h)开始的5个单元的内容置为0fefh。

〔习题2.17〕指令指针IP是通用存放器依旧专用存放器?有指令能够直截了当它赋值吗?哪类指令的执行会改变它的值?〔解答〕指令指针IP不是通用存放器,不可直截了当赋值,属于专用存放器。有且仅有循环、转移、子程序调用和返回、中断类等指令能够改变它的值。

〔习题2.18〕操纵转移类指令中有哪三种寻址方式?〔解答〕操纵转移类指令的寻址方式:相对寻址、直截了当寻址方式和间接寻址方式〔又能够分成存放器和存储器间接寻址〕。

〔习题2.19〕什么是短转移shortjump、近转移nearjump和远转移farjump?什么是段内转移和段间转移?8086有哪些指令能够实现段间转移?〔解答〕短转移:指段内-128~127之间的转移,位移量用一个字节表示近转移:指段内±32K之间的转移,位移量用一个字表示远转移:指段间1MB范围的转移段内转移:指在同一个代码段内的转移,能够是短转移或者近转移段间转移:指转移到另外一个代码段,确实是根基远转移8086/8088CPU的JMP、CALL和INTn指令能够实现段间转移

〔习题2.20〕8086的条件转移指令的转移范围有多大?实际编程时,你如何处理超出范围的条件转移?〔解答〕8086的条件转移的转移范围:在当前指令地址的+127~-128之内。如条件转移的转移范围超出此范围,可在此范围内安排一条无条件转移,再转移到范围外的目标地址。

〔习题2.21〕假设DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,试咨询执行以下段内间接寻址的转移指令后,转移的有效地址是什么?〔1〕JMPBX〔2〕JMPTABLE[BX]〔3〕JMP[BX][SI]〔解答〕〔1〕转移的有效地址EA=BX=1256H〔2〕转移的有效地址EA=[DS:20A1H+1256H]=[232F7]=3280H〔3〕转移的有效地址EA=[DS:1256H+528FH]=264E5H=2450H

〔习题2.22〕判定以下程序段跳转的条件〔1〕xorax,1e1eh

jeequal〔2〕testal,10000001b

jnzthere〔3〕cmpcx,64hjbthere〔解答〕〔1〕AX=1e1eh〔异或后为0〕〔2〕AL的D0或D7至少有一位为1〔3〕CX〔无符号数〕<64h

〔习题2.23〕设置CX=0,那么LOOP指令将循环多少次?例如:

movcx,0delay:

loopdelay〔解答〕216次。

〔习题2.24〕假设AX和SI存放的是有符号数,DX和DI存放的是无符号数,请用对比指令和条件转移指令实现以下判定:〔1〕假设DX>DI,转到above执行;〔2〕假设AX>SI,转到greater执行;〔3〕假设CX=0,转到zero执行;〔4〕假设AX-SI产生溢出,转到overflow执行;〔5〕假设SI≤AX,转到less_eq执行;〔6〕假设DI≤DX,转到below_eq执行。〔解答〕〔1〕假设DX>DI,转到above执行cmpdx,dijaabove

;=jnbeabove〔2〕假设AX>SI,转到greater执行cmpax,sijggreater

;=jnlegreater〔3〕假设CX=0,转到zero执行cmpcx,0jzzero

;=jcxzzero

〔4〕假设AX-SI产生溢出,转到overflow执行;cmpax,sijooverflow〔5〕假设SI≤AX,转到less_eq执行;cmpsi,ax

;cmpax,sijleless_eq

;jgeless_eq〔6〕假设DI≤DX,转到below_eq执行。cmpdi,dx

;cmpdx,dijbebelow_eq

;jaebelow_eq

〔习题2.25〕有一个首地址为array的20个字的数组,讲明以下程序段的功能。movcx,20movax,0movsi,axsum_loop:

addax,array[si]addsi,2loopsum_loopmovtotal,ax〔解答〕将首地址为array得20个字的数组求和,并将结果存进total单元中。

〔习题2.26〕按照以下要求,编写相应的程序段:〔1〕起始地址为string的主存单元中存放有一个字符串〔长度大于6〕,把该字符串中的第1个和第6个字符〔字节量〕传送给DX存放器。〔2〕从主存buffer开始的4个字节中保持了4个非压缩BCD码,现按低〔高〕地址对低〔高〕位的原那么,将它们合并到DX中。〔3〕编写一个程序段,在DX高4位全为0时,使AX=0;否那么使AX=-1。〔4〕有两个64位数值,按“小端方式〞存放在两个缓冲区buffer1和buffer2中,编写程序段完成buffer1-buffer2功能。〔5〕假设从B800h:0开始存放有100个16位无符号数,编程求它们的和,并把32位的和保持在DX.AX中。〔6〕字符串string包含有32KB内容,将其中的’$’符号替换成空格。〔7〕有一个100个字节元素的数组,其首地址为array,将每个元素减1〔不考虑溢出〕存于原处。〔8〕统计以’$’结尾的字符串srting的字符个数。〔解答〕〔1〕解答:movsi,0movdl,string[si]

;第1个字符送dl存放器:movdl,stirng[0]movsi,5movdh,string[si]

;第6个字符送dh存放器:movdl,stirng[5]〔2〕解答:xorsi,si

;si清零moval,buffer[si]

;第一字节incsimovah,buffer[si]

;第二字节movcl,4shlah,cl

;BCD码移到高半字节oral,ah

;组合成压缩BCD码movdl,al

;存进dl寄..incsimoval,buffer[si]

;第三字节incsimovah,buffer[si]

;第四字节movcl,4shlah,cl

;BCD码移到高半字节oral,ah

;组合成压缩BCD码movdh,al

;存进dh寄..〔3〕解答:testdx,0f000h

;testdh,0f0hjznext

;jnznextmovax,-1

;movax,0jmpagainnext:

movax,0

;movax,0ffffhagain:

...〔4〕解答:movax,wordptrbuffer1subax,wordptrbuffer2

;先减低16位movdx,wordptrbuffer1+2sbbdx,wordptrbuffer2+2

;后减高16位,需减低16位的借位〔5〕解答:movax,0b800h

movds,ax

;段地址

xorsi,si

;地址偏移量si=0

xordx,dx

;和的高字dx=0

movcx,99

;加的次数

movax,[si]

;第一个数again:

incsi

;指向下一个字单元

incsi

addax,[si]

;加下一个数

jnc

noc

;无进位转

incdx

;有进位dx=dx+1noc:

deccx

;次数-1

jnzcx,again

;非0接着加〔6〕解答1:不使用串操作指令〔更好〕movsi,offsetstringmovcx,8000h

;32k=2^15=8000hagain:

cmpbyteptr[si],‘$’

;‘$’=24hjnznext

;不要采纳jz进行分支movbyteptr[si],‘

;‘’=20hnext:

incsiloopagain

;deccx;jnzagain〔6〕解答2:使用串操作指令movdi,offsetstringmoval,’$’movcx,8000hcldagain:

scasbjnznextmovbyteptres:[di-1],‘

’next:

loopagain〔7〕解答1:movsi,offsetarray

movcx,100again:

decbyteptr[si]incsiloopagain〔7〕解答2:xorsi,si

;si<--0movcx,100

;循环次数

again:

decarray[si]incsiloopagain〔7〕解答3:movsi,offsetarraymovdi,simovax,ds

moves,axmovcx,100cldagain:

lodsb

decalstosbloopagain〔8〕解答:xorsi,si

;si<--0coun:

cmpstring[si],'$'je

doneincsijmpcoundone:

...

〔习题2.27〕对下面要求,分不给出3种方法,每种方法只用一条指令。〔1〕使CF=0

〔2〕使AX=0

〔3〕同时使AX=0和CF=0〔解答〕〔1〕解答:clcandax,axorax,ax〔2〕解答:xorax,axandax,0movax,0〔3〕解答:andax,0xorax,axsubax,ax

〔习题2.28〕参照本习题的示意图,分析调用序列,画出每次调用及返回时的堆栈状态。其中CALL前是该指令所在的逻辑地址;另外,段内直截了当调用指令的机器代码的字节数为3,段间直截了当调用指令那么为5个字节。〔解答〕主程序转子suba时段内调用:断点1为2000h:0400h+3,转子是只将IP压栈。suba转子subb时段间调用:断点2为2000h:0840h+5,转子时须将cs段地址和IP压栈suba转子subc时段内调用:断点3为2000h:0c021h+3,转子是只将IP压栈。注:压栈时先修改sp再压进断点,弹栈时先弹出断点再修改sp。

〔习题2.29〕AX、BX存放的是4位压缩BCD表示的十进制数,请讲明如下子程序的功能和出口参数。addal,bldaaxchgal,ahadcal,bhdaaxchgal,ahret〔解答〕压缩BCD码加法:AX←AX+BX出口参数:AX=BCD码和

〔习题2.30〕AAD指令是用于除法指令之前,进行非压缩BCD码调整的。实际上,处理器的调整过程是:AL←AH×10+AL,AH←0。要是指令系统没有AAD指令,请用一个子程序完成那个调整工作。〔解答〕shlah,1

;ah=2*a

(设原ah=a)

movdl,ah

;dl=2*a

movcl,2

;设定移位次数

shlah,cl

;ah=8*a

addah,dl

;ah=10*a

addal,ah

;al=10*a+al

xorah,ah

;清零ah

int3

;返回DOS注重:进口:AX中存放有“和〞〔两非压缩BCD码〕出口:AL中已为调整后的二进制数

〔习题2.31〕解释如下有关中断的概念:〔1〕内部中断和外部中断〔2〕单步中断和断点中断〔3〕除法错中断和溢出中断〔4〕中断向量号和中断向量表〔解答〕〔1〕内部中断是由于8086CPU内部执行程序引起的程序中断;外部中断是来自8086CPU之外的缘故引起的程序中断;〔2〕单步中断是假设单步标志TF为1,那么在每条指令执行结束后产生的中断;断点中断是供调试程序使用的,它的中断类型号为3通常调试程序时,把程序按程序的任务分成几段,然后,每段设一个段点;〔3〕除法错中断是在执行除法指令时,假设除数为0或商超过了存放器所能表达的范围产生的中断;溢出中断是在执行溢出中断指令INTO时,假设溢出标志OF为1时产生的中断;〔4〕中断向量号是中断类型号;中断向量表是中断向量号与它所对应的中断效劳程序起始地址的转换表。

〔习题2.32〕试对比INTn和段间CALL指令、IRET和段间RET指令的功能。〔解答〕INTn响应中断时,除象CALL保卫断点外,还应保卫FR;段间CALL指令用在主程序中实现子程序的调用。IRET返回时,除象RET恢复断点外,还应恢复FR;子程序执行完成后,应返回主程序中接着执行,这一功能由RET指令完成。

〔习题2.33〕什么是系统功能调用?汇编语言中,它的一般格式是如何样的?〔解答〕系统功能调用是用户在程序一级请示操作系统效劳的一种手段,它不是一条简单的硬指令,而是带有一定功能号的“访指令〞,它的功能并非由硬件直截了当提供,而是由操作系统操作系统中的一段程序完成的,即由软件方法实现的汇编语言中,它的一般格式是分如下四步进行:〔1〕在AH存放器置系统功能调用号;〔2〕在指定的存放器中设置进口参数;〔3〕用INT21H(或ROM—BIOS的中断向量号)指令执行功能调用;〔4〕据出口参数分析功能调用运行情况。

〔习题2.34〕补充例2.40,当有溢出时显示“Error!Overflow!〞,无溢出时显示“OK〞。〔解答〕okmsg

db‘OK’,‘$’errmsg

db‘Error!Overflow!’,‘$’…

movax,Xsubax,Yjooverflowmovdx,offsetokmsgjmpnextoverflow:

movdx,errmsgnext:

movah,9

int21h错误解答:movax,Xsubax,Yjooverflowmovdx,offsetokmsg

okmsg

db‘OK’,‘$’

movdx,errmsg

;错误1:数据定义在代码中movah,9int21hoverflow:

errmsgdb‘Error!Overflow!’,‘$’

movdx,errmsg

;错误2:缺少JMP指令movah,9int21h

〔习题2.35〕补充例2.42,显示“1〞的个数;注重首先将个数转换为ASCII码。〔解答〕andal,7fh

;使d7=0movdl,al

;转存于dljnpnext

;奇数个1转

oral,80h

;偶数个1使d7=1next:

xorbl,bl

;纪录1的个数dl=0movcx,8

;移位次数again:

shldl,1

;逻辑左移1次jncdesp

;如cf=0转incbl

;否那么cf=1个数加1desp:

loopagain

;cx=cx-1如cx不等于0,循环orbl,30h

;个数变为ASCII码movah,02h

;在CRT上显示个数movdl,blint21hret

〔习题2.36〕先提示输进数字“InputNumber:0~9〞,然后在下一行显示输进的数字,结束;要是不是键进了0~9数字,就提示错误“Error!〞,接着等待输进数字。〔解答〕;数据段str1

db'InputNumber:0~9:',0dh,0ah,'$'

str2

db'Error!',0dh,0ah,'$';代码段movah,09h

;显示str1字符串movdx,offsetstr1int21hgetkey:

movah,1

;调用DOS功能int21hcmp

al,'0'jberror

;小于0,出错处理cmpal,'9'jaerror

;大于9,出错处理movah,02h

;调用DOS显示字符功能,显示该数字movdl,alint21h...

;终止程序执行,返回DOSerror:

movah,09h

;出错,调用DOS功能显示str2字符串movdx,offsetstr2int21hjmpgetkey

;返回按键

〔习题2.37〕从键盘输进一个字符串〔不超过255个〕,将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示。〔解答〕思路:参考P67例2.52用0ah号DOS系统功能调用,从键盘输进一个字符串,然后从键盘缓冲区逐个取字符,在“a〞与“z〞之间的字符为小写字母,需要转换为大写字母〔减往20h〕,其他不变。.modelsmall.stack.dataarray

db255db0array1

db255dup('$')array2

db0dh,0ah,'$'.code.startupmovah,0ah

;键盘输进字符串movdx,offsetarrayint21hmovdx,offsetarray2

;回车换行movah,09hint21hmovbx,offsetarray1again:

moval,[bx]cmpal,'$'jzdonecmpal,'a'

;小于a和大于z的字符不是小写字母jbnextcmpal,'z'janextsubal,20h

;在a和z之间的字符才是小写字母,转换为大写mov[bx],al

;保持到原位置next:

incbxjmpagaindone:

mo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论