微机原理程序Word下载.docx
《微机原理程序Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理程序Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
cmpax,70
jlsix
cmpax,80
jlseven
cmpax,90
jleight
cmpax,100
jnenine
incs10
jmpshortchange_addr
nine:
incs9
eight:
incs8
seven:
incs7
six:
incs6
five:
incs5
change_addr:
addbx,2
loopcompare
ret
prognamends
endstart
2、统计用户输入字符串中数字个数。
用户输入字符串,统计其中数字’0’~’9’字符的个数
输入一个字符串,将小写字符变成大写字符/将大写字符变成小写字符,并输出字符串
完成用户输入字符串,给出用户输入中ASCII最小/最大的小写字母/大写字母/数字/字母等字符
strinlabelbyte
maxdb30
actdb30
strdb30dup(?
)
numdb0
movax,datarea
movds,ax
leadx,strin
movah,0ah
int21h
movdl,0
leabx,str
movcl,act
again:
cmpbyteptr[bx],'
0'
jbnext
9'
janext
incdl
next:
deccl
incbx
cmpcl,0
jnzagain
movnum,dl
movah,4ch
int21h
3、将DAT字单元中的16位二进制数分成四组,每组4位,然后将这4组放到DAT1、DAT2、DAT3、DAT4这4个字节单元中
DATDW0A5D2H
DAT1DB?
DAT2DB?
DAT3DB?
DAT4DB?
MOVAX,DAT
MOVBX,0F0FH
ANDBX,AX
MOVDAT1,BL
MOVDAT3,BH
MOVBX,0F0F0H
MOVDAT2,BL
MOVDAT4,BH
4、已知数据区中有一数组ARRAY,其元素类型为单字节,现统计其中正数、0、个数。
数据区结构见下,请写出程序主体部分。
DATASEGMENT
ARRAYDB23,-15,0,67,-19,0,-12,89,120,55
CNEQU$-ARRAY
DATAENDS
LEASI,ARRAY
MOVCX,CN
XORAX,AX
XORBX,BX
PZN0:
CMP[SI],0
JLPZN1
JZZN
INCAX
JMPPZN1
ZN:
INCBX
PZN1:
INCSI
LOOPPZN0
5、已知两个整数变量A和B,试编写下述操作程序:
(1)若两个数有一个是奇数,则将奇数存入A,偶数存入B中
(2)若两个数均为奇数,则两个数分别加1,并存回原变量
(3)若两个数均为偶数,则两个变量不变,写出程序主体部分
MOVAX,A
MOVBX,B
XORAX,BX
TESTAX,1
JZCLASS
TESTBX,1
JZEXIT
XCHGBX,A
MOVB,BX
JMPEXIT
CLASS:
TESTBX,1
INCB
INCA
EXIT:
6、按下列子程序说明信息编制子程序
子程序名:
CMPA
子程序功能:
比较两个长度相同的无(带)符号数x和y
入口参数:
x和y的首地址分别放在SI和DI中,数据长度在CL中
出口参数:
x>
y时,CF=0;
x<
y时,CF=1;
x=y时,ZF=1
受影响的寄存器:
标志寄存器
•Cmpaproc
•pushax
•pushdi
•pushsi
•pushcx
•movch,0
•Abc:
•moval,[si]
•cmpal,[di]
•jabig
•jbsmall
•incsi
•incdi
•deccx
•jnzabc
•xorax,ax
•jmpexit
•Big:
•clc
•Small:
•stc
•Exit:
•popcx
•popsi
•popdi
•popax
•ret
•Cmpaendp
带符号:
•jgbig
•jlsmall
•jzbvd
•bvd:
Cmpaendp
7、已知2个无符号数据X和Y,分别存放在ADRX和ADRY单元,编制程序,若X是Y的倍数,Y是X的倍数,显示1,否则显示0
MOVAX,ADRX
CMPAX,ADRY
JZDISP1
MOVBX,ADRY
JANEXT
MOVAX,ADRY
MOVBX,ADRX
NEXT:
MOVDX,0
DIVBX
CMPDX,0
MOVDL,‘0’
MOVAH,1
INT21H
HLT
DISP1:
MOVDL,‘1’
8、已知一多字节数据存放在内存DATA开始的连续单元中,求绝对值放在RESULT开始的多字节数据
DATADB12H,34H,56H,78H,9AH,BCH,DEH,F0H
CNEQU$-DATA
RESULTDB20DUP(?
LEADI,RESULT
DECDI
MOVAL,[DI]
TESTAL,80H
JNZF
CLD
LEASI,DATA
REPMOVSB
F:
LEASI,DATA
CLC
AGAIN:
MOVAL,0
SBBAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPAGAIN
9、若BLOCK开始的内存缓冲区中,有100个16位带(无)符号数,要把其中最大值存放在MAX单元中
MOVBX,OFFSETBLOCK
MOVAX,[BX]
INCBX
MOVCX,99
CMPAX,[BX]
JGNEXT
MOVMAX,AX
10、请求出AL中“1”的个数,结果存入AH中。
解:
MOVAH,0
Again:
SHLAL,1
ADCAH,0
CMPAL,0
JNZAgain
HLT
或
MOVAH,0
MOVCL,8
SHLAL,1
JNCNext
INCAH
Next:
DECCL
JNZAgain
HLT
11、若有一个ASCII字符串,它的起始地址放在单元STRING内,要求从串中取出每一个字符,加偶(奇)校验。
datasegment
stringdb'
1234567890'
countequ$-string
dataends
……
leasi,string
movcx,count
lodsb
andal,al
jpenext
oral,80h
mov[si-1],al
deccx
12、要求测试字节变量STATUS,如果第1位和第3位同时为1,则转移到ROUTINE_2;
如果第1位和第3位同时为0,则转移到ROUTINE_3;
除了上面2种情况,如果第1位或第3位,或第5位为1,则转移到ROUTINE_1;
此外其它情况,继续执行ROUTINE_4。
MOVAL,STATUS
NOTAL
TESTAL,00001010B
JZROUTINE_2
JZROUTINE_3
TESTAL,00101010B
JNZROUTINE_1
JMPROUTINE_4
13、试编写程序,对BUF字节存储区中的3个数进行比较,并按比较结果显示如下
(1)如果3个数都不相等则显示0
(2)如果3个数有2个数相等则显示1
(3)如果3个数都相等则显示2
BUFDB68,89,-5
MOVAL,BUF
MOVBL,BUF+1
MOVCL,BUF+2
CMPAL,BL
JZZERO12
CMPAL,CL
JZNEXT
CMPBL,CL
;
显示0
ZERO12:
CMPAL,CL
JZZERO123
;
显示1
ZERO123:
显示2
14、已知DATA1和DATA2是两个长度相同的多字节数据,其中数值小的字节放在地址小的单元中,DATA1和DATA2相加,结果放在SUM多字节数据
DATA1DB85H,27H,4AH
DATA2DB93H,87H,65H
LEGHDW3
SUMDB0,0,0
LEASI,DATA1
LEABX,DATA2
LEADI,SUM
MOVCX,LEGH
MOVAL,[SI]
ADCAL,[BX]
15、如果AL的第i位(从右向左依次为:
0位、1位……)状态与BL的第j位(从右向左依次为:
0位、1位……)状态相同,则AH清0,否则AH置为全1,i和j的值分别放在CL和CH中
MOVDL,AL
SHRDL,CL
PUSHCX
MOVDH,BL
MOVCL,CH
SHRDH,CL
POPCX
ANDDX,101H
XORDL,DH
JZZERO
MOVAH,0FFH
ZERO:
MOVAH,0
EXIT
16、将寄存器AH的第i位(从右向左依次为:
0位、1位……)的反码写入AL的第j位(从右向左依次为:
0位、1位……),AL的其余位保持不变,i和j的值分别在CL和CH中
MOVDX,AX
SHRAH,CL
ANDAH,1
NOTAH
RORAL,CL
ORAL,AH
ROLAL,CL