解:8086没有给段寄存器直接置值的指令,应该通过寄存器辗转设置。 (5) MOV [DI],[SI]
解:存储器单元之间不可直接传送,即两个操作数不能同为内存操作数。 (6) MOV AL,[CX]
解:CX不可以作为间址寄存器,只能用BX、BP、SI、DI。 (7) MOV AL,[SI] [DI]
解: 基址加变址寻址时 ,基址寄存器只能用BX或BP,变址寄存器只能用SI或DI,这里源操作数寻址用[SI+DI]是错误的。 (8) ADD BX,DS
解:DS段寄存器不能当通用寄存器用,故不可以出现在ADD指令中。 (9) INC [BX]
解: [BX]寻址数据类型不明确,应加类型说明 BYTE PTR [BX] 或 WORD PTR [BX]。 (10) SHL AX
解:缺少一个操作数。正确格式应为SHL AX, 1或SHL AX, CL(1或CL为移位次数)。 (11) MOVSB [DI] ,[SI]
解:MOVSB后不能加操作数,正确格式应为MOVSB。 (12) MOV 1000H,AX
解:立即数不能用作原操作数。 (13) SHL AX,5
解:原操作数应为1或CL,不能是大于1的数。大于1的数应放置在 CL中。 (14) DEC AX,5
解:DEC是减1指令没有原操作数。 (15) AAA BX
解:AAA是调整指令没有操作数(操作数是隐含的AL或AX)。 2.设DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H, SP=1352H,SI=1354H,
(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H
下列各指令都在此环境下执行,在各小题的空格中填入相应各指令的执行结果 MOV AX,1352H 解:AX=1352H
(1) MOV AX,[1352H] 解:AX=26FFH
(2) MOV 0150H [BX],CH
解:(11350H)=33H, (11351H)=3CH (3) MOV AX,0150H [BP] 解:AX=5188H (4) POP AX
解:AX=(21352H), SP=1354H (5) ADD [SI],CX
解:(11354H)=0ECH, (11355H)=1AH, SF=0, ZF=0, PF=1, CF=1, OF=0 (6) SUB BH,0150H [BX] [SI]
解:BH=75H, SF= 0, ZF=0, PF=0, CF=1, OF=0 (7) INC BYTE PTR 0152H [BX]
解:(11352H)=00H, (11353H)=26H, CF=0 (8) INC WORD PTR 0152H [BX]
解:(11352H)=00H, (11353H)=27H, CF=0 (10) SAR BYTE PTR 0150H [BX],1 解:(11350H)=0D2H, CF=1, OF=0 (11)SAL BYTE PTR 0150H [BX],1
解:(11350H)=4AH, CF=1, OF=1
程序与程序设计题
一、程序分析题
1 .MOV AL,10 ADD AL,AL SHL AL,1 MOV BL,AL ADD AL,BL
问:AL= BL=
解: AL=50H(或80)BL=28H(或40) 2. MOV BX,00FFH AND BX,0FFFH OR BX,0F0FH XOR BX,00FFH
问:BX= 解:2. BX=0F00H
3. XOR AX,AX MOV BX,2 MOV CX,10 LP:ADD AX,BX ADD BX,2 LOOP LP HLT
(1)该程序的功能是什么?
(2)程序执行后,AX= BX= CX= 解:(1)求2~20间的偶数和。(完成累加求和,即求:2+4+6+8+10+12+14+16+18+20)。 (2)AX=110,BX=22,CX=0 4.设DS=1000H,有如下数据段: DATA SEGMENT
ORG 10011
Xl DW 11H,22H,33H X2 DB 33H,44H,55H Y1 EQU 4321H Y2 EQU $- X2 X3 DB 88H,99H DATA ENDS
(1)该数据段共占用多少字节的存储单元? (2) Y1和Y2的值为多少?X3的值是多少? 解:(1)该数据段共占用11个字节
(2)Yl =4321H,Y2=3,X3=109H这里X3是用DB定义的,它是变量名。它的偏移地址为109H。Y1和Y2是由EQU定义的,它们是符号名,是常量。
5.下列程序段执行后,寄存器AX、BX和CX的值各为多少? ORG 1200H DA1 DW 100 ┆
MOV AX,DA1
MOV BX,0FFSET DA1
MOV CL,BYTE PTR DA1+1 MOV CH,TYPE DA1 HLT
解: AX=0064H BX=1200H CX=6400H
6.有数据段如下:
DATA SEGMENT ORG 1200H
BUF DB 5,6,‘78’ X1 DW 1,37H,46H Y1 EQU X1-BUF DATA ENDS
(1)该程序段占有的存储单元字节数是多少? (2)Y1的值是多少? 解:(1)占10个字节单元 (2)Y1=2
二、程序填空题
1. AX中有一个无符号数,若其值小于100,就加100;若其值大于等于100,就减50,但计算结果仍保存在AX中。在下面程序段每一空白处填上一条适当指令,以实现其功能。
CMP AX,100 SUB AX,50 PP:ADD AX,100 DONE:HLT 解:第一空白处填JC PP 第二空白处填JMP DONE
2.下面程序段判断A单元的值,并根据其值是负数、0或正数,分别将0FFH,00H,01H送入AL中。在空白处填入适当指令。
MOV AL,A CMP AL,0 JZ SYM
MOV AL,OFFH JMP DONE
SYM:MOV AL,1 DONE:HLT
解:第一个空填JZ DONE,因为程序已经给AL赋值,若AL等于0的话,AL中放的结果值也为0,所以转DONE即可。第二个空应填TEST AL,80H,因为其下面一条指令是JE SYM,其上一条指令应能影响ZF标志位,所以使用测试指令;即为0时(正数时)转SYM,给AL赋1。为非零时,即为负数时AL赋OFFH。
所以答案为:JZ DONE或JE DONE
TEST AL,80H或AND AL,80H 3.对于符号函数
?1当X〉0 ??Y??0当X?0??1当X〈0?? 请在下面程序段中每一空白处填上一条适当指令,实现符号函数功能。
MOV AL,X CMP AL,0 MOV Y,1 AA:JL BB
MOV Y,0
BB:MOV Y,0FFH DONE:HLT
解:第一空处填:JLE AA 第二空处填:JMP DONE 第三空处填:JMP DONE
三、编制程序
1.写出完成下列功能的程序段:
(1) 在数据段中,字变量DAT1有两个数据:1122H和3344H,字变量DAT2有两个数据:5566H和7788H,字变量DAT3为两个空单元。
(2)将DAT1的第二个字数据传送到AX。
(3) 将AX内容与DAT1的第一个字数据相减,将其差存人到DAT3的第一个字单元中。
(4)将DAT2中的第一个字送AX,并与DAT2中第二个字相加,其和存于DAT2的第一个字单元中。 (5) 将DAT2中的字单元数据除以DAT3第一个字单元中的数据,其商存于DAT3的第二个字单元中。
解: DATA SEGMENT
DAT1 DW 1122H,3344H DAT2 DW 5566H,7788H DAT3 DW ?,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START;MOV AX,DATA MOV DS,AX
MOV AX,DAT1+2 SUB AX,DAT1 MOV DAT3,AX MOV AX,DAT2 ADD AX,DAT2+2 MOV DAT2,AX CWD
IDIV DAT3
MOV DAT3十2,AX MOV AH,4CH INT 21H CODE ENDS
END START
2.在DAT和DAT1两个字节变量单元中有两个十进制数的ASCII码,编程实现将这两个ASCII码转换为两个BCD码,并以压缩形式存放在REST字节变量单元中。
解:MOV AL,DAT
SUB AL,30H ;将ASCⅡ码转为BCD码 MOV CL,4
SHL AL,CL ;将BCD码放在AL高四位中 MOV BL,DAT1
SUB BL,30H ;将DAT1中的ASCⅡ码转为BCD码 OR AL,BL ;将两个BCD码合并在AL寄存器中 MOV REST,AL ;将压缩形式的BCD码存入REST中 HLT
3.在DAT单元内有一个带符号的数X,编一程序段,根据X的情况进行如下处理: 若X为正奇数,则将X与BUF单元内容相加; 若X为正偶数,则将X与BUF单元内容相‘与’;
若X为负奇数,则将X与BUF单元内容相‘或’; 若X为负偶数,则将X与BUF单元内容相‘异或’。 解:这是一个多分支结构程序,要对正负数判断,还要对奇偶数进行判断。正负数判断看最高位是否为‘1’,为‘1’是负数,否则为正数。奇偶判断是对D0位进行判断,若为‘1’,则为奇数,否则为偶数。
MOV AL,DAT AND AL,DAT
JNS POSI ;若为正数转POS1 TEST AL,01H ;测试负数的奇偶性 JZ M ;若为负偶数转M
OR AL,BUF ;若为负奇数进行‘或’运算 JMP DONE
M:XOR AL,BUF ;负偶数进行‘异或’运算 JMP DONE
POSI:TEST AL,01H ;判断正数的奇偶性 JZ N ;为正偶数,转N
ADD AL,BUF ;为正奇数进行‘加’运算 JMP DONE
N:AND AL,BUF ;正偶数进行‘与’运算 DONE:MOV BUF,AL
HLT
4.从NUMB单元起有100个数,其值在0一100之间。试编程序实现以下数据统计: (1)统计大于60小于100的数据个数,统计结果存于C0单元。 (2)统计等于100的数据个数,统计结果存于C0+1单元。 (3)统计等于0的数据个数,统计结果存于C0十2单元。
(4)当小于60的数等于10个时,结束统计,同时置C0单元为0FFH。
解:这是一个典型的多分支带循环的问题。应首先确定算法流程。其流程图和编程如下: MOV CX,0064H ;长度送CX
LEA BX,NUMB ;100个数的首地址送BX MOV AX,0 ;清AH,AL
MOV CO,AX ;清C0,C0+1单元 MOV [CO+2],AX ;清C0+2,C+3单元 LP:MOV AL,[BX] ;取数
CMP AL,100 ;与100比较
JZ L100 ;若等于100,转L100 CMP AL,60;
JNC L60 ;若AL)=60,转L6。 INC AH ;AL<60,计数器加1 CMP AH,10 ;<60为10个时 JZ DONE1 ;转DONE1执行 OR AL,AL;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库微机原理补充习题(2)在线全文阅读。
相关推荐: