下面是将内存一字节数据高四位和低四位互换并放回原位置的程序,其中有7个语句中有错误,请找出错误的地方并改正。 第1行 DATA SEGMENT 第2行 DD1 DB 23H 第3行 DATA ENDM 第4行 CODE SEGMENT 第5行 ASSUME CS:CODE,DS:DATA 第6行 START MOV AX,DATA 第7行 MOV DS,AX 第8行 LEA SI,OFFSET DD1;取变量DD1的偏移地址 第9行 MOV AL,[SI] 第10行 MOV DL,4;设置移位次数 第1

题目

下面是将内存一字节数据高四位和低四位互换并放回原位置的程序,其中有7个语句中有错误,请找出错误的地方并改正。 第1行 DATA SEGMENT 第2行 DD1 DB 23H 第3行 DATA ENDM 第4行 CODE SEGMENT 第5行 ASSUME CS:CODE,DS:DATA 第6行 START MOV AX,DATA 第7行 MOV DS,AX 第8行 LEA SI,OFFSET DD1;取变量DD1的偏移地址 第9行 MOV AL,[SI] 第10行 MOV DL,4;设置移位次数 第11行 RCR AL,CL;循环右移4次 第12行 MOV [SI],AL 第13行 MOV AH,4CH 第14行 INT 21H 第15行 CODE ENDP;代码段结束 第16行 END BEGIN


相似考题
更多“下面是将内存一字节数据高四位和低四位互换并放回原位置的程序,其中有7个语句中有错误,请找出错误的地方并改正。 第1行 DATA SEGMENT 第2行 DD1 DB 23H 第3行 DATA ENDM 第4行 CODE SEGMENT 第5行 ASSUME CS:CODE,DS:DATA 第6行 START MOV AX,DATA 第7行 MOV DS,AX 第8行 LEA SI,OFFSET DD1;取变量DD1的偏移地址 第9行 MOV AL,[SI] 第10行 MOV DL,4;设置移位次数 第11”相关问题
  • 第1题:

    完成下面的程序段,使程序显示中的字符串。

    DATA SEGMENT

    BUE DB ‘HOW DO YOU DO?’,ODH,OAH,’$‘

    DATA ENDS

    CODE SEGMENT

    MOV AX,DATA

    MOV DS,AX

    MOV DX【 】

    MOV AH, 9

    INT 21H

    CODE ENDS


    正确答案:OFFSET BUF
    OFFSET BUF 解析:把BUF的偏移地址放到中,准备显示。

  • 第2题:

    阅读以下说明和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

    FLAG DW ?

    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)

    请根据试题的要求,将汇编程序代码中(1)~(5)空缺处的内容填写完整。


    正确答案:(1)126或其对应的二进制数形式 (2)CMP BXSI (3)MOV DIBX (4)INC DX (5)END START 这是一道要求读者掌握对分查表法算法的程序分析题。本题的解答思路如下: ①对分查表法用于有序表的查找。对一个字节长度为N的有序表(从小到大排列)先取N/2处的值与待找的数据X进行比较若X大于N/2处的值则下一次取N/2至N的中间值即3N/4处的值进行比较反之下一次取0至N/2的中间值即N/4处的值进行比较。如此不断对分查找直到找出所需要的数据X。 ②结合以上算法思想仔细分析试题的程序段。以下给出该程序段的每条语句的详细解析。 DATA SEGMENT ;DATA段定义伪指令 BINTAB DB 182532465678… ;第1~100个数据 DB 909599100106126… ;第101~200个数据 DB 189195197202206216… ;第201~256个数据 COUNT EQU 256 ; 数据块长度 FLAG DW? ;查到所找数据需要查找次数的存储单元 KEY EQU 100 ; 所查找的数据 DATA ENDS ;DATA段定义结束伪指令 STAK SEGMENT ;STAK段定义伪指令 STPN DB 20 DUP(?) STAK ENDS ;STAK段定义结束伪指令 CODE SKGMENT ;CODE段定义伪指令 ASSUME CS:CODEDS:DATAES;DATASS:STAK ;段寄存器说明伪指令 BINSEAT PROC FAR ;过程(子程序)定义伪指令 START:MOV AXDATA MOV DSAX MOV ESAX LEA SIBINTAB ;SI←数据表上指针 MOV CXCOUNT ;CS←数据块长度 MOV DX1 ;立即数1送DX表示第1次查询 MOV AXSI ;数据表首地址送AX ADD AXCX ;AX←数据表首地址十数据块长度 MOV DIAX ;DI←数据表下指针(AX) MOV ALKEY ;AL←要查询的数据 LOP0: MOV BXSI ;数据表首地址送BX ADD BXDI ;BX←数据表首地址+数据表尾地址 SHR BX1 ;BX←中项指针=(SI+D1)/2操作数逻辑右移 ;移一位相当对其除2 CMP AL[BX] ;要查询的数据与中项数据比较 J2 FOUND ;结果相同找到则转至FOUND PUSHF ;保存状态标志 CMP BXSI ;比较中项指针=上指针? JZ NFOUND ;相等表示未找到转至NFOUND POPF ;恢复状态标志 JL LESS ;要查询的数据小于中项数据时转至 LESS MOV SIBX ;要查询的数据大于中项数据时修改上指针 JMP NEXT ;表示在后一半继续查找 LESS: MOV DIBX ;要查询的数据小于中项数据时修改下指针 ;表示在前一半继续查找 NEXT; INC DX ;查找次数加1 JMP LOP0 ;重新计算中项指针继续查找 NFOUND:MOV AXDX ;未找到标志全1送DX FOUND; MOV AKDX ;查找次数送AX MOV FLAGAX ;查找次数送FLAG单元 RET :返回主程序 BINSEATENDP ;过程(子程序)定义结束伪指令 CODE ENDS ;CODE段定义结束伪指令 END START ; 模块结束伪指令 ③由以上分析可知根据“MOV ALKE Y”、“CMP AL[BX]”两条语句可推理出 (1)空缺处应填入题干中要求查询的数据126。 ④“CMP AL[BX]”语句用于所查询的数据与中项数据比较“JZ FOUND”语句表示如果比较结果相同则转至找到后的处理标号FOUND处由此可判断(2)空缺处填写的内容与所查询的数据不等于中项数据处理过程相关。 ⑤(2)空缺处的后一条语句“JZ NFOUND”语句表示如果比较结果相等则转至未找到处理标号NFOUND处由此可判断该空缺处填写的内容用于判断查找过程是否可以结束可通过比较中项指针是否等于数据表上指针的语句“CMP BXSI”来完成此功能。 ⑥由(3)空缺处所在语句的标号“LESS”可知(3)空缺处填写的内容与“JL LESS”语句(判断所查询的数据是否小于中项数据)相关。由对分查表法算法可知当所查询的数据小于中项数据时需修改数据表下指针以使查找过程在前一半继续进行。因此该空缺处需填入与数据表下指针DI相关的语句“MOV DIBX”。 ⑦同理由(4)空缺处所在语句的标号“NEXT”可知(4)空缺处填写的内容也与“JL LESS”语句(判断所查询的数据是否小于中项数据)相关。由对分查表法算法可知当所查询的数据大于中项数据时通过“MOV SIBX”语句修改数据表上指针以使查找过程在后一半继续进行。可见该空缺处是修改数据表下指针或上指针后继续查找的公共执行语句。再由“MOV DX1”语句及“MOV AXDX”、“MOV FLAGAX”语句可推理出(4)空缺处填写的内容是查找次数加1的“INC DX”语句。 ⑧由于(5)空缺处所填写的语句是程序模块的最后一条语句因此由程序中启动标号“START”可推理出该空缺处是一条与之相对应的模块结束伪指令“END START”用于告诉汇编程序源文件结束并给出执行程序的入口位置。 ⑨另外为了使读者更深入掌握对分查表法的应用下面给出用对分查表法进行子程序设计的步骤: a.表的长度放在CX寄存器中。 b.将BINTAB表的首地址放人SI寄存器中。 c.将要搜索的关键字放在AL中。 d.计算中点元素的地址(中项指针)并放入BX寄存器中。 e.将关键字AL与中点元素的值进行比较 若(AL)[BX)则选低值的半个表(即SI为首地址[BX]为尾地址)并转步骤d; 若(AL)>[BX]则选高值的半个表(即[BX]为首地址DI为尾地址)并转步骤d; 若(AL)=[BX]则找到并将查找次数送人FLAG存储单元。
    (1)126,或其对应的二进制数形式 (2)CMP BX,SI (3)MOV DI,BX (4)INC DX (5)END START 这是一道要求读者掌握对分查表法算法的程序分析题。本题的解答思路如下: ①对分查表法用于有序表的查找。对一个字节长度为N的有序表(从小到大排列),先取N/2处的值与待找的数据X进行比较,若X大于N/2处的值,则下一次取N/2至N的中间值即3N/4处的值进行比较,反之下一次取0至N/2的中间值即N/4处的值进行比较。如此不断对分查找,直到找出所需要的数据X。 ②结合以上算法思想,仔细分析试题的程序段。以下给出该程序段的每条语句的详细解析。 DATA SEGMENT ;DATA段定义伪指令 BINTAB DB 18,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 ; 数据块长度 FLAG DW? ;查到所找数据需要查找次数的存储单元 KEY EQU 100 ; 所查找的数据 DATA ENDS ;DATA段定义结束伪指令 STAK SEGMENT ;STAK段定义伪指令 STPN DB 20 DUP(?) STAK ENDS ;STAK段定义结束伪指令 CODE SKGMENT ;CODE段定义伪指令 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 ;SI←数据表上指针 MOV CX,COUNT ;CS←数据块长度 MOV DX,1 ;立即数1送DX,表示第1次查询 MOV AX,SI ;数据表首地址送AX ADD AX,CX ;AX←数据表首地址十数据块长度 MOV DI,AX ;DI←数据表下指针(AX) MOV AL,KEY ;AL←要查询的数据 LOP0: MOV BX,SI ;数据表首地址送BX ADD BX,DI ;BX←数据表首地址+数据表尾地址 SHR BX,1 ;BX←中项指针=(SI+D1)/2,操作数逻辑右移 ;移一位相当对其除2 CMP AL,[BX] ;要查询的数据与中项数据比较 J2 FOUND ;结果相同,找到则转至FOUND PUSHF ;保存状态标志 CMP BX,SI ;比较中项指针=上指针? JZ NFOUND ;相等表示未找到,转至NFOUND POPF ;恢复状态标志 JL LESS ;要查询的数据小于中项数据时,转至 LESS MOV SI,BX ;要查询的数据大于中项数据时,修改上指针 JMP NEXT ;表示在后一半继续查找 LESS: MOV DI,BX ;要查询的数据小于中项数据时,修改下指针 ;表示在前一半继续查找 NEXT; INC DX ;查找次数加1 JMP LOP0 ;重新计算中项指针继续查找 NFOUND:MOV AX,DX ;未找到,标志全1送DX FOUND; MOV AK,DX ;查找次数送AX MOV FLAG,AX ;查找次数送FLAG单元 RET :返回主程序 BINSEATENDP ;过程(子程序)定义结束伪指令 CODE ENDS ;CODE段定义结束伪指令 END START ; 模块结束伪指令 ③由以上分析可知,根据“MOV AL,KE Y”、“CMP AL,[BX]”两条语句可推理出, (1)空缺处应填入题干中要求查询的数据126。 ④“CMP AL,[BX]”语句用于所查询的数据与中项数据比较,“JZ FOUND”语句表示如果比较结果相同,则转至找到后的处理标号FOUND处,由此可判断(2)空缺处填写的内容与所查询的数据不等于中项数据处理过程相关。 ⑤(2)空缺处的后一条语句“JZ NFOUND”语句表示如果比较结果相等,则转至未找到处理标号NFOUND处,由此可判断,该空缺处填写的内容用于判断查找过程是否可以结束,可通过比较中项指针是否等于数据表上指针的语句“CMP BX,SI”来完成此功能。 ⑥由(3)空缺处所在语句的标号“LESS”可知,(3)空缺处填写的内容与“JL LESS”语句(判断所查询的数据是否小于中项数据)相关。由对分查表法算法可知,当所查询的数据小于中项数据时,需修改数据表下指针,以使查找过程在前一半继续进行。因此该空缺处需填入与数据表下指针DI相关的语句“MOV DI,BX”。 ⑦同理,由(4)空缺处所在语句的标号“NEXT”可知,(4)空缺处填写的内容也与“JL LESS”语句(判断所查询的数据是否小于中项数据)相关。由对分查表法算法可知,当所查询的数据大于中项数据时,通过“MOV SI,BX”语句修改数据表上指针,以使查找过程在后一半继续进行。可见该空缺处是修改数据表下指针或上指针后继续查找的公共执行语句。再由“MOV DX,1”语句及“MOV AX,DX”、“MOV FLAG,AX”语句可推理出,(4)空缺处填写的内容是查找次数加1的“INC DX”语句。 ⑧由于(5)空缺处所填写的语句是程序模块的最后一条语句,因此由程序中启动标号“START”可推理出,该空缺处是一条与之相对应的模块结束伪指令“END START”,用于告诉汇编程序源文件结束,并给出执行程序的入口位置。 ⑨另外,为了使读者更深入掌握对分查表法的应用,下面给出用对分查表法进行子程序设计的步骤: a.表的长度放在CX寄存器中。 b.将BINTAB表的首地址放人SI寄存器中。 c.将要搜索的关键字放在AL中。 d.计算中点元素的地址(中项指针),并放入BX寄存器中。 e.将关键字AL与中点元素的值进行比较, 若(AL)[BX),则选低值的半个表(即SI为首地址,[BX]为尾地址),并转步骤d; 若(AL)>[BX],则选高值的半个表(即[BX]为首地址,DI为尾地址),并转步骤d; 若(AL)=[BX],则找到并将查找次数送人FLAG存储单元。

  • 第3题:

    执行下列程序后,(CX)=( )。 DATA SEGMENT A DW 1, 2, 3, 4, 5 B DW 5 DATA SEGMENT CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA BX, A ADD BX, B MOV CX, [BX] MOV AH, 4CH INT 21H CODE ENDS END START

    A.400

    B.0

    C.10

    D.100


    正确答案:A
    解析:当执行指令“LEABX,A”时,将A相对数据段首地址的偏移量0送入BX寄存器,执行指令“ADDBX,B”后,(BX)=5。再执行指令“MOVCX,[BX]”时,由于源操作数是寄存器间接寻址方式且该指令为字传送指令,因此应将相对数据段首地址、偏移地址为0005的内容0400送入CX寄存2S。所以上述程序执行完后,(CX)=400。

  • 第4题:

    DSEG SEGMENT

    BUF DB 1,5,4,0,7,9,2,6

    L EQU O0111001B 用作逻辑尺

    RESULT DB 10 DUP(?)

    DSEG ENDS

    SSEG SEGMENT STACK

    DB 256 DUP(0)

    SSEG ENDS

    CSEG SEGMENT

    ASSUME DS:DSEG; SS:SSECG, CS:CSEG

    START PROC FAR

    PUSH DS

    XOR AX, AX

    PUSH AX

    MOV AX, DSEG

    MOV DS, AX

    MOV SI, 0

    MOV CX, 8

    MOV DL, L

    GOON: SHR DL, 1

    JC FILL

    MOV AL, BUF[SI]

    JMP NEXT

    FILL: MOV AL, OFFH

    NEXT: MOV RESULT[SI], AL

    INC SI

    LOOP GOON

    RET

    START ENDP

    CSEG ENDS

    END START

    在保持以上程序功能不变的前提下,INCSI指令可以用【 】指令替换。


    正确答案:ADDSI1
    ADDSI,1 解析:在保持程序功能不变的前题下,INCSI指令的功能为使SI寄存器的值加1,所以可以用ADDSI,1指令替换。

  • 第5题:

    在书写汇编语言程序时,在代码段中初始位置要对数据段进行加载,加载的指令语句,下面()描述正确。 

    • A、mov ax,data
    • B、mov ds,data
    • C、mov ax,data  mov ds,ax
    • D、mov ax,ds  mov cs,ds

    正确答案:C

  • 第6题:

    阅读下列程序段,指出①~④ 条语句操作的结果,并分析其中有错误的语句。 DATA   SEGMENT  V1     DB     5  V2     EQU    10 DATA   ENDS           ①     INC    V1  ②     INC    V2  ③     MOV    AX, V2  ④     INC    AX


    正确答案: ①(V1)+1=5+1=6→V1;
    ②错误语句,因为变量V2为立即操作数;
    ③10→AX;
    ④(AX)+1=10+1=11→AX,但V2并未改变。

  • 第7题:

    阅读下面的程序,回答问题 DATA SEGMENT BUF DB '1234' N=$-BUF BCD DB N DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,BUF MOV CX,N LEA DI,BCD+N-1 LOOP1:MOV AL,[SI] SUB AL,30H MOV [DI],AL INC SI DEC DI DEC CX JNE LOOP1 MOV AH,4CH INT 21H CODE ENDS END START 取消数据段的BCD存储区,将处理后的数据放回原处,应如何修改程序?


    正确答案: 取消数据段的BCD存储区,将经处理后的数据放回原处,修改程序如下:
    DATA SEGMENT
    BUF DB '1234'
    N=$-BUF
    DATA ENDS
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:MOV AX,DATA
    MOV DS,AX
    LEA SI,BUF
    MOV CX,N
    LOOP1:MOV AL,[SI]
    SUB AL,30H
    MOV [SI],AL
    INC SI
    DEC CX
    JNE LOOP1
    MOV AH,4CH
    INT 21H
    CODE ENDS
    END START

  • 第8题:

    阅读下面的程序,回答问题 DATA SEGMENT BUF DB '1234' N=$-BUF BCD DB N DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,BUF MOV CX,N LEA DI,BCD+N-1 LOOP1:MOV AL,[SI] SUB AL,30H MOV [DI],AL INC SI DEC DI DEC CX JNE LOOP1 MOV AH,4CH INT 21H CODE ENDS END START 说明程序功能,程序执行后,从BCD开始的N个字节单元中的内容是什么?


    正确答案:程序功能是将从BUF开始的连续4个字符’1234’转变为4个对应的数值,按逆序存放到以变量BCD为首地址的存储单元中。程序执行后,从BCD开始的N个字节单元中的内容是4321。

  • 第9题:

    阅读下面的程序,回答问题 DATA SEGMENT BUF DB '1234' N=$-BUF BCD DB N DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,BUF MOV CX,N LEA DI,BCD+N-1 LOOP1:MOV AL,[SI] SUB AL,30H MOV [DI],AL INC SI DEC DI DEC CX JNE LOOP1 MOV AH,4CH INT 21H CODE ENDS END START 如果将代码段中的指令LEA DI,BCD+N-1改成LEA DI,BCD;DEC DI改成INC DI,其它指令不变,程序执行后,从BCD开始的N个字节单元中的内容是什么?


    正确答案: 程序执行后,从BCD开始的N个字节单元中的内容是1234。

  • 第10题:

    问答题
    已经定义数据段如下: DATASEGMENT NUM=56 X DB NUM Y DB 27 Z DW 148 DATAENDS 指出下列指令中的错误: (1)MOV Y,X (2)MOV BL,04B8H (3)MOV AL,Z (4)MOV [BX],3 (5)MOV [BX],[DI] (6)MOV DS,DATA (7)MOV NUM,AX (8)MOV ES,DS (9)MOV AX,FLAGS (10)MOV CS,AX

    正确答案: (1)指令MOV Y,X同时出现了两个存储器操作数。
    (2)指令MOV BL,04B8H操作数类型不匹配(04B8H是16位立即数,BL是8位寄存器)。
    (3)指令MOV AL,Z操作数类型不匹配(Z是16位操作数,BL是8位寄存器)。
    (4)指令MOV [BX],3操作数类型不能确定。
    (5)指令MOV [BX],[DI]出现了两个存储器操作数。
    (6)指令MOV DS,DATA不能把立即数装入段寄存器。
    (7)指令MOV NUM,AX立即数不能用作目的操作数。
    (8)指令MOV ES,DS不能在段寄存器之间直接传输。
    (9)指令MOV AX,FLAGS中,FLAGS寄存器只能隐含在少量指令中使用。
    (10)指令MOV CS,AX中,CS寄存器不能用作目的操作数。
    解析: 暂无解析

  • 第11题:

    填空题
    初一5班共64人,已知每个学生的数学成绩存放在SCODE开始的单元中,求其平均成绩,并放在PJCD单元。试填写下面程序段。 DATA SEGMENT SCODE DB 68, 95, 76,…. PJCD DB DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START:MOV AX, DATA MOV DS, AX MOV AX,O MOV CX, 30 MOV SI,() ADD1:ADD AL() JNC() INC() NEXT:INC() LOOP() MOV CL,6 SHR(),CL MOV PJCD,() MOV AH,4CH INT 21H CODE ENDS END START

    正确答案: OFFSEFSCODE,[SI],NEXT,AH,SI,ADD1,AX,AL
    解析: 暂无解析

  • 第12题:

    问答题
    阅读下列程序段,指出①~④ 条语句操作的结果,并分析其中有错误的语句。 DATA   SEGMENT  V1     DB     5  V2     EQU    10 DATA   ENDS           ①     INC    V1  ②     INC    V2  ③     MOV    AX, V2  ④     INC    AX

    正确答案: ①(V1)+1=5+1=6→V1;
    ②错误语句,因为变量V2为立即操作数;
    ③10→AX;
    ④(AX)+1=10+1=11→AX,但V2并未改变。
    解析: 暂无解析

  • 第13题:

    阅读下述程序,指出宏指令ABC的功能是______。

    1 ABC MACRO X1,X2,X3

    2 LOCAL CONT

    3 PUSH AX

    4 MOV AX, X1

    5 SUB AX, X2

    6 CMP AX, 0

    7 JGE CONT

    8 NEG AX

    9 CONT: MOV X3, AX

    10 POP AX

    11 ENDM

    12 DATA SEGMENT

    13 X DW 32

    14 Y DW 98

    15 Z DW ?

    16 DATA ENDS

    17 CODE SEGMENT

    18 ASSUME CS:CODE,DS:DTAT

    19 BEGIN: MOV AX, DATA

    20 MOV DS,AX

    21 ABC X,Y,Z

    22 MOV AH, 4CH

    23 INT 21H

    24 CODE ENDS

    25 END BEGIN


    正确答案:第一个参数减第二个参数差的绝对值送第三个参数
    第一个参数减第二个参数,差的绝对值送第三个参数

  • 第14题:

    下面的程序用来从键盘重复接收一字符送BUFF开始的单元,直到接收到行结束

    标志ODH。在程序中填空,保证其正确运行。

    1 DATA SEGMENT

    2 BUFF DW 128 DUP(0)

    3 DATA ENDS

    4 CODE SGEMENT

    5 ASSUME CS:CODE,DS:DATA

    6 BEGIN: MOV AX, DATA

    7 MOV DS, AX

    8 LEA SI, BUFF

    9 GCH: MOV AH, 01H

    10 INT 21H

    11 MOV [SI], AL

    12 INC SI

    13 __________

    14 JNE GCH

    15 MOV AH, 4CH

    16 INT 21H

    17 CODE ENDS

    18 END BEGIN


    正确答案:CMP ALODH
    CMP AL,ODH 解析:由题意可知,跳出循环的标志为0DH,应在循环段中加一个比较指令,判断结束条件,即在空处用指令CMP AL,0DH。

  • 第15题:

    下述程序的功能是求变量X和变量Y的和送AX寄存器,请填空。

    DATA SEGMENT

    X DW 5

    Y DW 6

    DATA ENDS

    CODE SEGMENT

    ASSUME CS:CODE,DS:DATA

    BEGIN: MOV AX, DATA

    MOV DS, AX

    MOV AX, X

    ADD AX, Y

    MOV AH, 4CH

    INT 21H

    _________

    END BEGIN


    正确答案:CODE  ENDS
    CODE  ENDS 解析:本题考查汇编源程序的格式,每个段的定义要同时有SEGMENT和ENDS语句相对应,整个源程序的结束要以END结束。

  • 第16题:

    已知A是一个变量,下列使用取偏移算符OFFSET错误的语句为()。

    • A、MOV SI,OFFSET A[DI]
    • B、MOV SI,OFFSET A
    • C、MOV SI,OFFSET A+1
    • D、MOV AX,OFFSET A

    正确答案:A

  • 第17题:

    指出下列指令中哪些是错误的,错在什么地方。  (1)MOV DL,AX  (2)MOV 8650H,AX  (3)MOV DS,0200H  (4)MOV [BX],[1200H]  (5)MOV IP,0FFH  (6)MOV [BX+SI+3],IP  (7)MOV AX,[BX][BP]  (8)MOV AL,ES:[BP]  (9)MOV DL,[SI][DI]  (10)MOV AX,OFFSET 0A20H  (11)MOV AL,OFFSET TABLE  (12)XCHG AL,50H  (13)IN BL,05H  (14)OUT AL,0FFEH


    正确答案:(1)长度不匹配
    (2)立即数不能做目的操作数
    (3)段寄存器不能用立即数赋值
    (4)两个内存单元不能直接传送数据
    (5)IP 不能用指令直接修改
    (6)指令中不能出现 IP
    (7)BX/BP 应与 SI/DI 搭配
    (8)正确
    (9)SI/DI 应与 BX/BP 搭配
    (10)OFFSET 后应跟内存单元
    (11)偏移地址为16 位,AL 长度不够
    (12)立即数不能用于XCHG
    (13)IN 必须用 AL/AX
    (14)操作数顺序反向;地址应为 8 位

  • 第18题:

    阅读下列程序段,注释指令中属性分离符的功能。 DATA    SEGMENT       A       DW   20,100,-60H      B       DB  ‘ABCDEFG ’  DATA    ENDS             ┆  ①MOV AX,  SEG B  ②MOV BX,  OFFSET B ③MOV CX,  TYPE A  ④MOV  DX ,  TYPE B 


    正确答案: ①段首址DATA→AX
    ②变量B的偏移量6→BX
    ③2→CX
    ④1→DX

  • 第19题:

    阅读下面的程序,回答问题 DATA SEGMENT BUF DB '1234' N=$-BUF BCD DB N DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,BUF MOV CX,N LEA DI,BCD+N-1 LOOP1:MOV AL,[SI] SUB AL,30H MOV [DI],AL INC SI DEC DI DEC CX JNE LOOP1 MOV AH,4CH INT 21H CODE ENDS END START 找出一条指令代替指令“SUB AL,30H”,使程序功能不变。


    正确答案: 用指令“AND AL,0FH”代替指令“SUB AL,30H”,程序功能不变。

  • 第20题:

    分析下列指令的正误,对于错误的指令要说明原因并加以改正。 (1) MOV AH,BX (2) MOV [BX],[SI] (3) MOV AX,[SI][DI] (4) MOV MYDAT[BX][SI],ES:AX (5) MOV BYTE PTR[BX],1000 (6) MOV BX,OFFSET MAYDAT[SI] (7) MOV CS,AX (8) MOV DS,BP


    正确答案: (1)MOVAH,BX
    错误,寄存器类型不匹配,可改为MOVAX,BX
    (2)MOV[BX],[SI]
    错误,两个操作数不能都为存储单元,可改为MOVBX,[SI]或MOV[BX],SI
    (3)MOVAX,[SI][DI]
    错误,寻址方式中只能出现一个变址寄存器,可改为MOVAX,[BX][DI]。
    (4)MOVMYDAT[BX][SI],ES:AX
    错误,AX签不能有段跨越前缀,去掉ES:,改为MOVMYDAT[BX][SI],AX
    (5)MOVBYTEPTR[BX],1000
    错误,1000超出字节空间存储范围
    (6)MOVBX,OFFSETMAYDAT[SI];正确
    (7)MOVCS,AX
    错误,MOV指令CS不能做目的操作数,可改为MOVDS,AX
    (8)MOVDS,BP;正确

  • 第21题:

    已经定义数据段如下: DATASEGMENT NUM=56 X DB NUM Y DB 27 Z DW 148 DATAENDS 指出下列指令中的错误: (1)MOV Y,X (2)MOV BL,04B8H (3)MOV AL,Z (4)MOV [BX],3 (5)MOV [BX],[DI] (6)MOV DS,DATA (7)MOV NUM,AX (8)MOV ES,DS (9)MOV AX,FLAGS (10)MOV CS,AX


    正确答案: (1)指令MOV Y,X同时出现了两个存储器操作数。
    (2)指令MOV BL,04B8H操作数类型不匹配(04B8H是16位立即数,BL是8位寄存器)。
    (3)指令MOV AL,Z操作数类型不匹配(Z是16位操作数,BL是8位寄存器)。
    (4)指令MOV [BX],3操作数类型不能确定。
    (5)指令MOV [BX],[DI]出现了两个存储器操作数。
    (6)指令MOV DS,DATA不能把立即数装入段寄存器。
    (7)指令MOV NUM,AX立即数不能用作目的操作数。
    (8)指令MOV ES,DS不能在段寄存器之间直接传输。
    (9)指令MOV AX,FLAGS中,FLAGS寄存器只能隐含在少量指令中使用。
    (10)指令MOV CS,AX中,CS寄存器不能用作目的操作数。

  • 第22题:

    单选题
    在书写汇编语言程序时,在代码段中初始位置要对数据段进行加载,加载的指令语句,下面()描述正确。
    A

    mov ax,data

    B

    mov ds,data

    C

    mov ax,data  mov ds,ax

    D

    mov ax,ds  mov cs,ds


    正确答案: C
    解析: 暂无解析

  • 第23题:

    问答题
    阅读下列程序段,注释指令中属性分离符的功能。 DATA    SEGMENT       A       DW   20,100,-60H      B       DB  ‘ABCDEFG ’  DATA    ENDS             ┆  ①MOV AX,  SEG B  ②MOV BX,  OFFSET B ③MOV CX,  TYPE A  ④MOV  DX ,  TYPE B

    正确答案: ①段首址DATA→AX
    ②变量B的偏移量6→BX
    ③2→CX
    ④1→DX
    解析: 暂无解析