PUSH PUSH PUSH MOV REPZ JZ POP POP POP RET YES: MOV COMP CODE END
CX SI DI CX, S_LTH CMPSB YES DI SI CX
;如果两个串相同,则说明找到
MOV AH, 4CH INT ENDP ENDS MAIN
RES, 0FFH
21H
11.执行下列指令后,AX寄存器中的内容是什么?
TABLE DW 10,20,30,40,50 ENTRY DW 3
. . MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX] 答:(AX)=40
12.指出下列程序中的错误: STAKSG SEGMENT
DB 100 DUP(?)
STA_SG ENDS DTSEG SEGMENT
DATA1 DB ?
DTSEG END CDSEG SEGMENT
MAIN
PROC
FAR
START: MOV DS,DATSEG
MOV AL,34H ADD AL,4FH MOV DATA,AL
START ENDP CDSEG ENDS
END
答案: 改正后: STAKSG SEGMENT
DB
100 DUP(?)
STAKSG ENDS DTSEG DATA
SEGMENT DB ? ENDS
DTSEG
CDSEG SEGMENT MAIN
PROC
FAR
ASSUME CS: CDSEG, DS: DTSEG, SS: STAKSG
START: MOV AX, DTSEG
MOV DS, AX MOV AL, 34H ADD AL, 4FH MOV DATA1, AL MOV AH, 4CH INT
21H
MAIN ENDP ENDS END
START
CDSEG
13.请写出上述两条指令执行后,BX寄存器中的内容。
DATA
SEGMENT
TABLE_ADDR DW 1234H
ENDS
DATA
┆
MOV BX, TABLE_ADDR LEA
BX, TABLE_ADDR
答案: MOV BX,TABLE_ADDR ;执行后(BX)=1234H
LEA BX,TABLE_ADDR ;执行后(BX)=OFFSET TABLE_ADDR
14.读下面程序,在其中的空处添上适当内容。该程序完成了什么功能?程序运行后,变量RS的值是多少?
DATA SEGMENT
BUF
DB -13,24,5,-62 DB 77,20,-7,145,0
CNT DB $ -BUF RS DATA ENDS STACK
SEGMENT PARA STACK DB 256 DUP(?) ENDS DB 0
STACK
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START
PROC FAR PUSH DS
MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA BX,BUF
MOV CH,0 MOV CL,
LP: MOV AL,[BX]
TEST AL,80H JE INC INC LOOP LP RET ENDP
CONT RS BX
CONT:
START CODE ENDS
END START
答:程序空处可填CNT,字节变量RS的最后结果是04H。该程序实现的功能是:统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。需要注意的是:十进制数据“145”在以二进制带符号字节数据形式存放时相当于“-111”。
15.试编写一个汇编语言程序段,要求对键盘输入的小写字母用大写字母显示出来。 答案: abc: mov
int cmp jb cmp ja sub mov mov int jmp
ah,1 21h al,’a’ stop al,’z’ stop al,20h dl,al ah,2 21h abc
stop: ret
16.编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示“MATCH”,若不同则显示“NO MATCH”。
答案:datarea
segment
string1 db ‘asfioa’