15
NUM1 07H NUM2 01H NUM3 01H 43H 00H 05H 05H 41H ? 01H 05H 42H ? 05H 6) 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?(P83)
FLDB DB ?
TABLEA DW 20 DUP(3 DUP(?)) TABLEB DB ‘ABCD’ 编号 命令 1 MOV AX,TYPE FLDB 2 MOV AX,TYPE TABLEA 3 MOV CX,LENGTH TABLEA 4 MOV DX,SIZE TABLEA 5 MOV CX,LENGTH TABLEB 6 MOV CX,LENGTHOF TABLEB 7 MOV CX,LENGTHOF TABLEA 8 MOV DX,SIZEOF TABLEA 9 MOV DX,SIZEOF TABLEB 结果 (AX)=1 (AX)=2 (CX)=20 (DX)=40 (CX)=1 (CX)=4 (CX)=60 (DX)=120 (DX)=4 7) 已知:(P78,79)
ORG 100H
ARY DW 3,4,5,6 CNT EQU $-ARY DB 7,8,CNT,9
则执行指令“MOV AX,ARY+2”和“MOV BX,ARY+10”后,AX=?,BX=?。 解:ORG是地址定位伪指令,$是地址计数器。ARY的起始地址是100H,,ARY+10的地址10AH对应的CNT数值为0AH,所以 AX=04H,BX=0AH
8) 指出下列指令的错误:
编号 1 指令 MOV AH,BX 错误 操作数位宽不一致 16
2 3 4 5 6 MOV [BX],[SI] MOV AX,[SI][DI] 7 操作数不允许都是存储器 SI和DI不允许同时作为变址寻址出现 MOV MYDATA[BX][SI],ES:AX 寄存器寻址不须段超越前缀 MOV BYTE PTR[BX],1000 1000超过BYTE上限127 MOV BX,OFFSET MYDATA[SI] OFFSET只对变量和标号表示的直接寻址有用,是在汇编阶段获取偏移地址,而指令“MOV AX,OFFSET NAMES[BX][SI]”中BX、SI只有在执行时才确定,所以无法如此组合取偏移地址。 MOV CS,AX 不能给CS和IP赋值 9) 根据下面的指令和伪指令序列执行完AX寄存器的内容是多少?
TAB DW 1,2,3,4,5,6
ENTRY EQU 6 MOV BX, OFFSET TAB ADD BX,ENTRY MOV AX,[BX] 答:(AX)= 4
;BX=x
;BX=x+6 ;
10) 阅读下列程序,回答问题。
BEGIN: IN AL, 20H MOV BL, AL IN AL, 30H MOV CL, AL MOV AX, 0 ADLP: ADD AL,BL ADC AH, 0 DEC CL JNZ ADLP HLT
(1) 本程序执行什么操作?
从20H读出的数据B,从30H读出的数据C,计算B乘以C (2) 执行结果存放在什么地方?
存在AX中
17
11)
序号 1 2 3 4 5 6 7 8 9 10 指出下列8088指令的错误:
指令 MOV 2000,BP PUSH 2000 POP CS XLAT BX MUL AX,BX SHL DX,8 IN AX,0382H OUT AX,20H MOVSB DI,SI LOOP CX 错误 目的操作数不能是立即数 PUSH操作数不能是立即数 POP操作数不能是CS XLAT无操作数(BX+AL) MUL只有一个操作数,另一个隐含在AL或AX中 移位数大于1时,移位数应放到CL;立即数只能是1 端口地址是16位,PORT必须是DX寄存器,其内容是16位端口地址 OUT目的操作数应为PORT,两操作数位置反了 MOVSB操作数均属隐含寻址,起始串地址在DS:SI中,目的串地址在ES:DI中,重复次数在CX中 LOOP指令中的CX操作数是隐含的 12) 从FIRST开始的100个单元中存放着一个字符串,结
束符‘$’。编程统计该字符串中字母‘A’的个数。
.MODEL SMALL .STACK .DATA
FIRST DB 'ABCDAYAAU$' MSG DB 'Count of A is ?$' .CODE START:
MOV AX,@DATA MOV DS,AX
MOV CX, 100 ;循环100次
MOV AL, 0 ;统计字母'A'的个数 MOV SI, OFFSET FIRST ;字符串起始索引 ALOOP:
CMP [SI],'$' ;检查是否到字符串结尾 JZ AEXIT ;是结尾就退出 CMP [SI],'A' ;检查是否是字符'A'
JNZ ANEXT ;不是A就调到下一个 INC AL ;是A就计数加1 ANEXT:
INC SI ;字符串索引加1 LOOP ALOOP
18
AEXIT:
LEA DX,MSG
ADD AL,30H ;数值转换成可显字符 MOV BX,DX
MOV 0EH[BX],AL ;替换字符串中的问号 MOV AH,9 INT 21H
MOV AX, 4C00H INT 21H END START
13) 请说明下面两段程序的功能。
(1) mov si,600h
mov di,601h mov ax,ds mov es,ax mov cx,256 std
repmovsb
从ds:600h开始向低地址复制字256次,将偶数位数值复制到奇数位 (2) cld
mov ax,0fefh mov cx,5
mov bx,3000h mov es,bx mov di,2000h repstosw
从内存地址32000h开始存入5个字,其值为0fefh
14) 15)
编写一个子程序,实现对一组代码进行奇校验。 编程从键盘输入4位十六进制数的ASCII码,并将其
转换为4位十六进制数存入DX寄存器中。
.MODEL SMALL .STACK .DATA
19
.CODE .STARTUP
MOV CX,4 ;输入4位 MOV DX,0 ;十六进制数 INPUT_LOOP:
MOV AH,1 ;输入一个字符到AL INT 21H
CALL ATOI ;将AL的十六进制字符转为数值
PUSH CX ;执行移位操作须用CL,先保留CX MOV CX,4 ;左移位数
SHL DX,CL ;目标值左移4位 MOV AH,0 ;将AX高8位归零
OR DX,AX ;DX后面追加新输入的数值 POP CX ;恢复CX LOOP INPUT_LOOP .EXIT
;子程序: ATOI
;功能: 16进制字符转成对应的数值 ;入口参数: AL ;出口参数: AL ATOI PROC
CMP AL,66H JG ERROR CMP AL,61H JGE LOWERA CMP AL,46H JG ERROR CMP AL,41H JGE UPPERA CMP AL,39H JG ERROR CMP AL,30H JGE NUMBER LOWERA: SUB AL,57H JMP OVER UPPERA:
SUB AL,37H JMP OVER NUMBER:
04732微型计算机及接口技术课后思考题与练习题04732微型计算机及接口技术课后思考题与练习(一至四)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)