李伯成《微机原理》习题 第三章
MOVAX,00H;立即寻址
SUB AX,AX;寄存器寻址
MOVAX,[BX];寄存器间接寻址
MOVAX,TABLE;直接寻址
MOVAL,ARAY1[SI];寄存器相对寻址
MOVAX,[BX+6];寄存器相对寻址
若1KB的数据存放在TABLE以下,试编写程序将该数据拌到NEXT之下。
程序片段如下:
ORG 100h
MOVCX,03FFH;数据个数
LEASI,TABLE;源区首地址
LEADI,NEXT; 目的区首地址
AGAIN:MOVAL,[SI];
MOV[DI],AL; 搬移
INC SI
INC DI; 移动地址指针
DECCX; 循环计数器递减
JNZ AGAIN; 循环未结束转
HLT; 暂停
TABLE DB 1024 dup ('A'); 源数据区
NEXTDB 1024 dup (0);目的数据区
编写10个字(16位二进制数)之和的程序
ORG 100h
LEASI,ADD1;
LEADI,ADD2;
LEABX,SUM;
MOVCL,CONT;
MOVCH,0; 循环初始化
CLC;进位清零
MADD1:MOVAX,[SI];读加数1
ADCAX,[DI]
ADDSI,2;移动源区地址指针
ADDDI,2;移动目的区地址指针
MOV[BX],AX;回存计算结果
ADDBX,2;移动“和”存储区地址指针
LOOPMADD1;循环控制
HLT;暂停
ADD1DB 0FEH,86H,7CH,44h,56H,1FH,24H,01H,02H,33H;加数1
ADD2DB 56H,49H,4EH,0FH,9CH,22H,45H,11H,45H,21H; 加数2
SUMDB 10 DUP (0); 和存储单元
CONT DB5 ; 循环次数
3.4 某16位二进制数,放在DATA连续的两个单元中,试编程求其平方根和余数,将其分别存放在ANS和REMAIN中。
ORG 100h
MOVBL,2; 除数初值
AGAIN:MOVCX,NUM;预计最大循环次数
MOVAL,BL;0、1的平方根除外
MULBL; 得到2的平方
CMPAX,CX;大于原始数据么?
JGEXIT;若原始数据小于4转EXIT
MOVAX,CX;读数
DIVBL;试除
INCBL;除数递增
JMPAGAIN;继续除
EXIT:DECBL;去除除数自加
MOVANS,BL;存商
MOVAL,BL;恢复余数
MULBL;
SUBCX,AX;
MOVREMAIN,CL;
HLT
NUMDW7;
ANSDB ?;
REMAINDB?;
3.5 在DATA1之下顺序存放着以ASCII码表示的千位数,将其转换成二进制数。
MOVCL,4;移位次数
MOVCH,CL;循环次数
MOVSI,OFFSET ASCBIN
CLD
XORAX,AX
XORDX,DX
ASCB1:LODSB
ANDAL,7FH
CMPAL,'0';不大于‘0’结束转换
JLERR
CMPAL,'9'
JGASCB2;大于‘9’转ASCB2
SUBAL,30H; 数字形式二进制数减30H
JMPASCB3
ASCB2:CMPAL,'A';大于‘9’又小于‘A’结束转换
JLERR
CMPAL,'F'
JGERR;大于‘F’为不合理数,结束转换
SUBAL,37H;字符形式ASCII数减37H
ASCB3:ORDL,AL
ROLDX,CL
DECCH
JNZASCB1
ROLDX,CL
MOVBIN,DX;存储转换结果
ERR:NOP
HLT
ASCBINDB '1','B,'4','3'
BINDW ?
3.7 编写