问题 问答题


阅读以下说明和x86汇编语言代码,根据要求回答问题1至问题3。表6-3所示为 x86系统指令及寄存器说明表。
[说明]
在计算机控制中,有些数据补偿、计算及转换等参数的计算非常复杂,编程难,程序长且运算费时,但是用数表却比较容易实现。
设有256个字节的数据,已按从小到大的顺序存放在以BINTAB为首地址的数据区单元中,现要求查找其中值为126的数据,用对分查表法查询的汇编程序如下:
[汇编程序代码]
DATA SEGMENT
BINTAB DBl8,25,32,46,56,78,… ;第1~100个数据
DB 90,95,99,100,106,126,… ;第101~200个数据
DB 189,195,197,202,206,216,… ;第201~256个数据
COUNT EQU 256
FLAGDW
KEY EQU (1)
DATA ENDS

STAK SEGMENT
STPN DB 20 DUP()
STAK ENDS

CODE SEGMENT
ASSUME CS,CODE, DS,DATA, ES:DATA, SS:STAK
BINSEAT PROC FAR
START, MOV AX, DATA
MOV DS, AX
MOV ES, AX
LEA SI, BINTAB
MOV CX, COUNT
MOV DX, 1
MOV AX, SI
ADD AX, CX
MOV DI, AX
MOV AL, KEY
LOP0, MOV BX, SI
ADD BX, DI
SHR BX, 1
CMP AL, [BX]
JZ FOUND
PUSHF
(2)
JZ NFOUND
POPF
JL LESS
MOV SI, BX
JMP NEXT
LESS, (3)
NEXT, (4)
JMP LOP0
NFOUND: MOV AX, DX ;未找到,标志全1送DX
FOUND: MOV AX, DX
MOV FLAG, AX
RET
BINSEAT ENDP
CODE ENDS
(5)

[问题2]
请用MOV语句实现汇编程序代码中“LEASI,BINTAB”语句的功能。

答案

参考答案:

解析:MOV SI,OFFSET BINTAB这是一道要求读者掌握实现相同功能的汇编语句改写的编程题。本题的解答思路如下: ①在汇编程序代码中“LEA SI,BINTAB”语句用于实现将数据表BINTAB的首地址送源变址寄存器SI的功能,在第1次查询时该地址被定义为数据表的上指针。 ②传送指令MOV可实现CPU内部寄存器之间的数据传送、寄存器与内存之间的数据传送,以及将一个立即数送给CPU的内部寄存器或内存单元。 ③由于每个变量具有段属性(SEG)、偏移量属性(OFFSET)和类型属性(TYPE),其中,段和偏移量两个属性可构成变量的逻辑地址。由此与“LEA SI,BINTAB”语句所实现的功能等价的语句是:“MOV SI,OFFSET BINTAB”。

选择题
单项选择题