几个汇编语言问题.高手帮忙解答下..

2024-12-23 14:18:12
推荐回答(1个)
回答1:

1.MOV
[SI],'A';
有错,应该指定内存的属性为字节,改为MOV
BYTE
PTR
[SI],'A'
2.MOV
AL,BX;有错,类型不匹配,AL为8位,BX为16位
3.MOV
BL,SI+2;有错,应该改为MOV
BL,[SI+2]
4.INC
[BX];正确
5.MOV
256,AL;有错,立即数256不能作为目的操作数
6.MOV
AX,BYTE
PTR
ALFA;有错,类型不匹配,AX为字,BYTE
PTR
ALFA指定字节
7.MOV
ALFA,BATA;有错,两内存单元不能直接操作
8.MUL
-25
;有错,MUL指令的操作数不能为立即数
9.PUSH
20A0H
;有错,PUSH指令的操作数不能为立即数
10.POP
CS
;有错,CS不能作为目的操作数
11.XCHG
[SI],3
;有错,XCHG指令中的操作数不能为立即数
12.MOV
IP,AX
;有错,IP不能通过MOV指令改变
13.SUB
[SI],[DI]
;有错,两内存单元不能直接操作
14.PUSH
DH
;有错,PUSH指令以字为单位进行操作,不能为字节DH
15.AND
AX,DS
;有错,DS不能作为AND指令的操作数
16.DIV
256
;有错,DIV指令的操作数不能为立即数
17.MOV
ES,1234H
;有错,立即数不能直接送段寄存器
18.MOV
CS,AX
;有错,CS不能作为目的操作数
19.SUB
DL,CF;有错,CF不能出现在指令的操作数中
20.MOV
AL,300
;有错,300超出字节表示范围
21.JDXZ
NEXT
;有错,无JDXZ指令
假设数据定义如下:
S1
DB
'GOOD
MORNING'
S2
DB
30
DUP('')
用串指令编写程序段分别完成以下功能:
1.从左到右把S1中的字符串传送到S2.
LEA
SI,S1
LEA
DI,S2
MOV
CX,S2-S1
CLD
REP
MOVSB
2.从右到左把S1中的字符串传送到S2.
MOV
CX,S2-S1
LEA
SI,S1+11
LEA
DI,S2+11
STD
REP
MOVSB
3.把S1中的第3和第4个字节装入AX.
MOV
AL,S1+2
MOV
AH,S1+3
4.把AX寄存器的内容存入从S2+5开始的字节中.
LEA
DI,S2+5
MOV
CX,12
CLD
REP
STOSW
5.检查S1字符串中有无空格字符,如有则把它传送给BH寄存器中
LEA
SI,S1
MOV
CX,S2-S1
MOV
AL,20H
CLD
REPNZ
SCASB
JNZ
TJ
MOV
BH,20H
TJ:RET