为了将AX和BX寄存器中存放的32位数据左移一位(其中AX寄存器中的数据为高16位),下面的程序
A.ADC AX ,0
B.SHL AX ,1
C.ROL AX ,1
D.RCL AX,1
A.ADC AX ,0
B.SHL AX ,1
C.ROL AX ,1
D.RCL AX,1
A.SUB AX,BX JC label
B.SUB AX,BX JNC lable
C.CMP AX,BX JA lable
D.CMP AX,BX JG label
A、0032H,1234H
B、1234H,0032H
C、1234H,1234H
D、0032H,0032H
A.AND AX,BX
B.XOR AX,BX
C.SUB AX,BX
D.OR AX,BX
例如:
部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的一段原程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
[试题程序]
EXTRN LOAD:FAR,SAVE:FAR
N EQU 40
STAC SEGMENT STACK
DB 128 DUP ()
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
RESULT DB N+2 DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
NDATA DB N DUP(0)
PDATA DB N DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;置附加段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NANE0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
**********BEGIN**********
LEA SI,RESULT
(1) DI,OFFSET PDATA ;PDATA为正数数组存放缓冲区首址
NOV BX,OFFSET NDATA ;NDATA为负数数组存放缓冲区首址
XOR DX,DX
MOV CX,N
CLD
MAIN1: LODSB
TEST AL, (2)
Z MAIN2
NC DH
OV [BX],AL
NC BX
(3)
MAIN2: INC DL
OV [DI],AL
NC DI
NAIN3: (4) NAIN1
EA SI,PDATA
A DI,RESULT
OV [DI],DL
NC&nb
下面()选项中的程序段可以将AX寄存器的高4位移至BX的低4位。
A.MOV CL,4 SAL AX,CL SHL AX,CL ROL BX,CL RCL BX,CL
B.MOV CL,4
C.LP: SHL AX,1 LP: SHL AX,1 ROL BX,1 RCL BX,1 LOOP LP DEC CL JNZ LP
D.MOV CX,4 MOV CL,4 LP: SHL AX,1 LP: SHL AX,1 ROL BX,1 RCL BX,1 LOOP LP DEC CL JNZ LP
下面哪一个选项中的程序段可以将AX寄存器的高4位移至BX的低4位?
A. MOV CL,4 SAL AX,CL ROL BX,CL
B.MOV CL,4 SHL AX,CL RCL BX,CL
C.MOV CX,4 LP:SHL AX,1 ROL BX,1 LOOP LP JNZ LP
D.MOV CL,4 LP:SHL AX,1 RCL BX,1 DEC CL
已知(AX)=1000H,(BX)=2000H,依次执行PUSH AX,PUSH BX、POP AX指令后,AX寄存器中的内容是()。
A.1000H
B.0010H
C.2000H
D.0020H
例如:
内存中有:30H('0'),39H('9'),31H('1')…
结果为:00H,09H,01H…(最后为M)
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。
试题程序:
EXTRN LOAD:FAR, SAVE:FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP()
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP()
RESULT DB N+1 DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,S S:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 数据区起始地址
LEA SI,NAME0 ; 原始数据文件名
MOV CX,N ; 字节数
CALL LOAD ; 从INPUT1.DAT中读取数据
; ****BEGIN****
MOV DI,OFFSET RESULT
MOV BX,0
MOV CX,N
MOV DL, (1)
PRO: MOV AL,SOURCE[BX]
(2) AL,3 OH
MOV [DI],AL
(3)
ADD AL,DL
(4)
MOV DL.AL
INC BX
(5)
JNZ PRO
(6)
;****END****
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
MOV CX,N+1 ; 字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START
写出完成如下功能的指令。 (1)BX和AX内容相加,结果存入AX。 (2)把AL寄存器的内容与数OAOH相减,结果存入AL。 (3)用BX寄存器间接寻址方式把存储器中的一个字和DX相加,结果存入DX。 (4)用SI和位移量0020H的寄存器相对寻址方式把内存中的一个字和AX相加,结果存入AX。