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

来源:百度知道 编辑:UC知道 时间:2024/05/10 22:41:58
判别下列语句是否有错并说明理由.
1.MOV [SI],'A'
2.MOV AL,BX
3.MOV BL,SI+2
4.INC [BX]
5.MOV 256,AL
6.MOV AX,BYTE PTR ALFA
7.MOV ALFA,BATA
8.MUL -25
9.PUSH 20A0H
10.POP CS
11.XCHG [SI],3
12.MOV IP,AX
13.SUB [SI],[DI]
14.PUSH DH
15.AND AX,DS
16.DIV 256
17.MOV ES,1234H
18.MOV CS,AX
19.SUB DL,CF
20.MOV AL,300
21.JDXZ NEXT

假设数据定义如下:
S1 DB 'GOOD MORNING'
S2 DB 30 DUP('')
用串指令编写程序段分别完成以下功能:
1.从左到右把S1中的字符串传送到S2.
2.从右到左把S1中的字符串传送到S2.
3.把S1中的第3和第4个字节装入AX.
4.把AX寄存器的内容存入从S2+5开始的字节中.
5.检查S1字符串中有无空格字符,如有则把它传送给BH寄存器.
不是学....是毕业补考的事...谁学这样的啊..我工商管理的.

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
MO