微机原理与接口技术第四章汇编题2531.docx
《微机原理与接口技术第四章汇编题2531.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术第四章汇编题2531.docx(5页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术第四章汇编题2531
25.试编制一个程序把AX中的16进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中。
例如,当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H。
DATASSEGMENT;数据段
ADDRDB4DDUP(?
)
DB'$'
DATASENDS
CODESSEGMENT;代码段
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS;初始化
MOVDS,AX
MOVAX,066FFH;此处可以设置ax的数值.为了验证.在这里我就将ax设置为66FF
;{本程序段将ax中的十六进制数值转换为asccl码且传送给addr数组
MOVDX,AX;将ax保护起
;①转换ah的高四位
ANDAH,11110000B
MOVCL,04H
SHRAH,CL
ADDAH,30H;将其转换为相对的ascll码
CMPAH,39H;判断如果不大于39则证明其位数字继续转换其他的,否则证明是字母还要加7h
JNASHUZI
ADDAH,07H
SHUZI:
MOV[ADDR+0],AH
;②转换ah的低四位
MOVAX,DX;将之前保护的ax回送
ANDAH,00001111B
ADDAH,30H;将其转换为相对的ascll码
CMPAH,39H;判断如果不大于39则证明其位数字继续转换其他的,否则证明是字母还要加7h
JNASHUZI2
ADDAH,07H
SHUZI2:
MOV[ADDR+1],AH
;③转换al的高四位
MOVAX,DX;将之前保护的ax回送
ANDAL,11110000B
MOVCL,04H
SHRAL,CL
ADDAL,30H;将其转换为相对的ascll码
CMPAL,39H;判断如果不大于39则证明其位数字继续转换其他的,否则证明是字母还要加7h
JNASHUZI3
ADDAL,07H
SHUZI3:
MOV[ADDR+2],AL
;④转换al的低四位
MOVAX,DX;将之前保护的ax回送
ANDAL,00001111B
ADDAL,30H;将其转换为相对的ascll码
CMPAL,39H;判断如果不大于39则证明其位数字继续转换其他的,否则证明是字母还要加7h
JNASHUZI4
ADDAL,07H
SHUZI4:
MOV[ADDR+3],AL;}转换完毕
;向屏幕输出所转换好的ascll码
LEADX,ADDR
MOVAH,09H
INT21H
MOVAH,07H;任意按键结束
INT21H
MOVAX,4C00H;退出程序
INT21H
CODESENDS
ENDSTART
27.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。
试编制一程序把既在A中又在B中出现的整数存放于数组C中
CodeSegment
AssumeCS:
Code,DS:
Code
Adb10DUP(?
)
Bdb20DUP(?
)
Start:
pushcs
popds
pushcs
popes
leasi,AA
leadi,CC
movcx,15
cld
Load_AL:
pushcx
leabx,BB
movcx,20
lodsb
Compare:
cmpal,[bx]
jnz$+3
stosb
incbx
loopCompare
popcx
loopLoad_AL
movah,4ch;结束程序
int21h
CCdb?
CodeENDS
ENDStart
29.试编写一程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在终端上显示如下信息:
(1)如果三个数都不相等则显示0;
(2)如果三个数有二个数相等则显示1;
(3)如果三个数都相等则显示2。
DSEGSEGMENT
ARRAYDW3DUP(?
)
DSEGENDS
;---------------------
DSEGSEGMENT
MAINPROCFAR
ASSUMECS:
CSEG,DS:
DSEG
START:
PUSHDS;设置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;给DS赋值
BEGIN:
LEASI,ARRAY
MOVDX,0;(DX)用于存放所求的结果
MOVAX,[SI]
MOVBX,[SI+2]
CMPAX,BX;比较第一和第二两个数是否相等
JNENEXT1
INCDX
NEXT1:
CMP[SI+4],AX;比较第一和第三两个数是否相等
JNENEXT2
INCDX
NEXT2:
CMP[SI+4],BX;比较第二和第三两个数是否相等
JNENUM
INCDX
NUM:
CMPDX,3
JLDISP
DECDX
DISP:
ADDDL,30H;转换为ASCII码
MOVAH,2;显示一个字符
INT21H
RET
MAINENDP
CSEGENDS;以上定义代码段
;------------------------------------------
ENDSTART
31.已定义了两个整数变量A和B,试编写程序完成下列功能:
(1)若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中;
(2)若两个数中均为奇数,则将两数加1后存回原变量;
(3)若两个数中均为偶数,则两个变量均不改变。
DATASEGMENT
ADB23H
BDB48H
DATASEGMENT
CODESEGMENT
START
MOVAL,A
MOVBL,B
TESTAL,01H
IFZERO?
;AL为偶数
TESTBL,01H
MOVA,BL;A为偶数,B为奇数
MOVB,AL
_PARITY:
;两个均为偶数不做改变
ELSE;AL为奇数
TESTBL,01H
JZB_IS_PARITY
INCAL
INCBL
MOVA,AL
MOVB,BL
B_IS_PARITY:
ENDIF
END
JZ_PARITY
33.下面的程序段有错吗?
若有,请指出错误。
CRAYPROC
PUSHAX
ADDAX,BX
RET
ENDPCRAY
有错:
最后一行写反了.应为:
CRAYENDP