2、阅读程序,加注必要说明,回答所提问题 1.设某数据区定义如下:
ORG 0100H
NEME DB ‘TOM’,20
DB ‘ROSE’,25 DB ‘KATE’,22
下列各组指令,若为合法指令,请写出执行结果,若为非法指则写出错误原因。
(1) MOV SI,5
LEA DI,NAME[SI+6]
MOV AL,[DI]
(AL)=______’T’__________ (2) MOV SI, 4 LEA BX, NAMES
CMP [BI] [SI], BYTE PTR NAMES+10 (SF)=___________________
2.设初值(AX)=4321H,(DX)=8765H,则
MOV CL, 04H SHL DX, CL MOV BL, AH SHL AX, CL SHR BL, CL OR DL, BL
上述程序执行后(DX)=______7654H____;(AX)=____3210H____________.
3.设有100个字节数据(补码),存放在数据段中EA=2000H的存储区内。以下程序应能从该数据中找出最大的一个数并存入同一数据段EA=2100H的单元中,请完成该程序(在空白处填入适当的语句)。
MAX: MOV BX,2000H MOV AL,[BX]
MOV CX,____100_______ LOOP1: INC BX
CMP AL, [BX]
_____JG_____, LOOP2 MOV AL, [BX] LOOP2: DEC CX
JNZ ___LOOP1__________ MOV _____[EA]_________,AL
4.设已知附加数据段中字数组DATA1中定义如下: DATA1 DW, 123 -4, -1024 FFFFH, 0 DW, 666, 888, ‘A’, -1, ABCDH
执行下列程序段,试问结果(AX)﹦_____________;(BX)=_____________. TEST1: MOV CX,10 DEC CX LEA DI,DATA1 MOV AX,BX
CHKMIN: ADD DI,2 CMP ES:[DI], BX JAE CHKMAX MOV BX,ES:[DI] JMP SHORT NEXT CHKMAX: CMP ES:DI,AX JBE NEXT MOV AX, ES:[DI] NEXT: LOOP CHKMIN
5、阅读下列汇编语言程序,写出程序执行后指定单元的内容和寄存器的内容。
Data segment at 2000H Org 0100H
Array DB 0FEH,86H,95H,21H,79H,05H,53H,47H COUNT EQU $-ARRAY DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATA MOV DS,AX MOV DX,2 LOP1: MOV CS,COUNT MOV BX,CX MOV SI,CX
LOP2: MOV AL,ARRAY[SI-1] CMP AL,ARRAY[SI-2] JGE NEXT
XCHG AL,ARRAY[SI-2] MOV ARRAY[SI-1],AL MOV BX,CX NEXT: DEC SI DEC CX CMP CX,DX JGE LOP2 CMO BX,COUNT JE DONE INC DX JMP LOP1 DONE:HLT CODE ENDS END BEGIN
程序执行结果:(20100H)=_________, (20107H)=_________;
BX=______________; CX=______________; DX=______________。
6. 源程序如下:
MOV CL,4
MOV AX,[2000H] SHL AL,CL SHR AX,CL MOV [2000H],AX
试问:若程序执行前,数据段内(2000H)=09H,(2001H)=03H, 则执行后有(2000H)=_39H____,(2001H)=___00H___。
本程序段的功能_________________________。 7. 源程序如下:
MOV AL,0B7H AND AL,0DDH XOR AL,81H OR AL,33H
JZ LAB1 JMP LAB2
试问:执行程序后AL=__00H_____;
程序将转到哪一个地址执行:____LAB2______。 8. 源程序如下: MOV CX,9 MOV AL,01H MOV SI,1000H NEXT: MOV [SI],AL INC SI SHL AL,1 LOOP NEXT
试问:执行本程序后有:AL=___00H__;SI=___1008H___;CX=___0___;
本程序的功能是______________________________。 9. 某系统中8253占用地址为100H~103H。初始化程序如下: MOV DX, 103H
MOV AL, 16H OUT DX, AL SUB DX, 3 OUT DX, AL
试问:此段程序是给8253的哪一个计数器初始化?安排工作在哪种工作方式?__ _计数器0_____方式3________;
若该计数器的输入脉冲的频率为1MHZ,则其输出脉冲的频率为:____45KHZ_______。 10. 已知某8255A在系统中占用88~8BH号端口地址,现欲安排其PA,PB,PC口全部为输出,
PA,PB口均工作于方式0模式,并将PC6置位,使PC3复位,试编写出相应的初始化程序:
MOV AL, 80H OUT 8BH,AL MOV AL,ODH OUT 8BH,AL
MOV AL,06H OUT 8BH,AL
11. 编程: 已知某输入设备的数据端口地址为40H,状态端口地址为41H,其中D0位为“1”时,表示“READY”状态。试编程实现:
(1)采用查询方式从该设备输入20个ASCII码表示的十进制数,并求出这20个十进制数的累加和;
(2)将此累加和转换成BCD码,并存放到NBCDH(百位数)和NBCDL(存十位和个位数)单元中。 注:只要求写出程序的可执行部分,可以不写任何伪指令。 参考程序:MOV CX,20
MOV BL,0 INLOOP: IN
TEST
AL,41H AL,01H
JZ INLOOP IN AL,40H
AND AL,OFH ;ASCII十进制 (BCD)
ADD
BL,AL
INLOOP ; 共输入20个
LOOP
MOV AL,BL ;累加和?AL MOV AH,0
MOV BL,100
DIV
BL
;AX?BL?AL,余数?AH
MOV NBCDH,AL ; 存百位数 MOV AL,AH