汇编语言程序设计

一、改错(只能对每条错误指令的一个操作数进行修改)。
1. ADD BX,AL 改正:
2. MOV AX, A999H 改正:
3. MOV AX, F8 改正:
4. MOV AL, 1234H 改正:
5. MOV AX, [CX] 改正:
6. MOV DS, 1000H 改正:
7. ADD [BX],10 改正:
8. PUSH AH 改正:
9. IN AL, BX 改正:
10.OUT 400H, AL 改正:
11. MUL 8 改正:
12. MOV [DI],WORD PTR [SI] 改正:
13. ADD DI, AL 改正:
14. MOV CS, AX 改正:
15. SUB 10[SI][DI], AX 改正:

二、设 (DS)=1000H, (ES)=2000H, (SS)=3000H, (BX)=100H, (SI)=200H, (DI)=300H, (BP)=400H。请指出下列各条指令中目的操作数是什么寻址方式?并说明物理地址是多少?
SUB [BP], BX ;;
MOV [BX+DI], SI ;;
ADD ES:[SI], DI ;;
MOV 10[BX], DI ;;
MOV DS:[100H], BX ;;

三、 设物理地址20010H处的字为1234H,物理地址20012H处的字为5678H,且(DS)=2000H, (SS)=2001H。请写出执行下面的每条指令后AX寄存器的内容是什么?
MOV BX, 10H
MOV AX, 1[BX] ;;(AX)=?
MOV AX, 2[BX] ;; (AX)=?
MOV BP, 0
MOV AX, [BP] ;; (AX)=?
MOV AX, 1[BP] ;; (AX)=?

四、依次执行如下程序段中的各指令,指出每一条指令执行后,AX中的十六进制内容是什么?
MOV AX, 1234H ;(AX) =
SAL AX, 1 ;(AX) =
AND AL, 0FH ;(AX) =
ADD AX, 1000H ;(AX) =
ROR AX, 1 ;(AX) =
XCHG AH, AL ;(AX) =
INC AH ;(AX) =
TEST AX, 8000H ;(AX) =

五、数据段问答题
设当前数据段的定义如下:
DATA SEGMENT
A DB 1, ‘1’, -1, 0
B DW 5678H, -1
C DW $, B,$
D DB $-B,2 DUP(9)
DATA ENDS
1. 以字节为单位,画出该数据段的数据存储示意图, 并在存贮图中标明各变量的偏移地址;
2. 指出执行下列各指令后,各寄存器的内容。
(1)MOV AX, A ; (AX) = ________
(2)MOV BX, C-1 ; (BX) = ________

六、简答题
1. 名词解释: 汇编语言 汇编 汇编程序

2. 如何正确实现 (AL) → DI的功能?请分有符号数和无符号数两种情况讨论。

3.说明指令:REPZ CMPSB 的工作过程。

4.什么是计算机中断?

5.说明宏与子程序的区别。

七、编程题
编写一个完整的程序,实现从键盘上输入一个字符(数字字符和字母),以16进制显示该字符的ASCII码(例如输入字母’a’,则显示61)
提示:使用下面的DOS功能调用
(1) 功能:等待从键盘输入一个字符并将输入字符的ASCII码送入寄存器AL中。
调用格式:MOV AH,1
INT 21H
(2) 功能:显示一个字符
调用格式: MOV DL,待显示字符的ASCII码
MOV AH, 2
INT 21H

一.
1.ADD BX,AX 或 ADD BL,AL ;类型配对
2.MOV AX,0A999H
3.MOV AX,0F8H
4.MOV AX,1234H 或 MOV AL,12H
5.MOV AX,[BX]
6.MOV DS,AX ;DS不能直接存立即数
7.ADD [BX],10 ;对
8.PUSH AX ;push不能直接push立即数
9.IN AL,DX
10.OUT 40H ,AL
11.MUL AL ;mul不能直接跟立即数
12.MOV [DI],AX ;mov不能两个都是内存
13.ADD DI,AX
14.MOV DS,AX ;CS不可以改
15.SUB 10[SI],AX ;si di 不可以同时出现
二.
SUB [BP], BX 寄存器间接寻址方式;30400H;
MOV [BX+DI], SI 基址变址寻址方式;10400H;
ADD ES:[SI], DI 寄存器相对寻址方式;20200H;
MOV 10[BX], DI 寄存器相对寻址方式;10100H;
MOV DS:[100H], BX 相对基址变址寻址方式;10100H

三.
3456H;5678H;1234H;5678H;

四.
1234H;2468H;0008H;1008H;0804H;0408H;0508H;0508H

五.
01H,31H,0FFH,00H,78H,56H,FFH,FFH,00H,24H,00H,0BH,00H,0BH,19H,09H,09H
(从左往右地址变大)
AX=3101H,BX=0023H

六.
1.
汇编语言:(AssemblyLanguage)是面向机器的程序设计语言。
汇编:把汇编语言翻译成机器语言的过程称为汇编。
汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。汇编语言是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段。

2.

3.
单独cmpsb就是逐一比较8个位;加上rep,循环比较,还是比较这8位啊

4.
是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。

5.
宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们二者之间存在着以下本质的区别:
1、在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;
2、汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化;
3、宏引用时,参数是通过“实参”替换“形参”的方式来实现传递的,参数形式灵活多样,而子程序调用时,参数是通过寄存器、堆栈或约定存储单元进行传递的;
4、宏引用语句扩展后,目标程序中就不再有宏引用语句,运行时,不会有额外的时间开销,而子程序的调用在目标程序中仍存在,子程序的调用和返回均需要时间。
总之,当程序片段不长,速度是关键因素时,可采用宏来简化源程序,但当程序片段较长,存储空间是关键因素时,可采用子程序的方法来简化源程序和目标程序。

七.
…………
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-18
一.
1. ADD BX,AX 或 ADD BL,AL ;类型配对
2. MOV AX,0A999H
3. MOV AX,0F8H
4. MOV AX,1234H 或 MOV AL,12H
5. MOV AX,[BX]
6. MOV DS,AX ;DS不能直接存立即数
7. ADD [BX],10 ;对的诶
8. PUSH AX ;push不能直接push立即数
9. IN AL,DX
10. OUT 40H ,AL
11. MUL AL ;mul不能直接跟立即数
12. MOV [DI],AX ;mov不能两个都是内存
13. ADD DI,AX
14. MOV DS,AX ;CS不可以改
15. SUB 10[SI],AX ;si di 不可以同时出现
二.
SUB [BP], BX 寄存器间接寻址方式;30400H;
MOV [BX+DI], SI 基址变址寻址方式;10400H;
ADD ES:[SI], DI 寄存器相对寻址方式;20200H;
MOV 10[BX], DI 寄存器相对寻址方式;10100H;
MOV DS:[100H], BX 相对基址变址寻址方式;10100H

三.
3456H;5678H;1234H;5678H;

四.
1234H;2468H;0008H;1008H;0804H;0408H;0508H;0508H

五.
01H,31H,0FFH,00H,78H,56H,FFH,FFH,00H,24H,00H,0BH,00H,0BH,19H,09H,09H
(从左往右地址变大)
AX=3101H,BX=0023H

六.
汇编语言是一种符号语言,他和机器语言几乎一一对应,但在书写中却是用有字符串组成的助记符
。。。。。。。
(希望对你有帮助)
第2个回答  2012-05-18
自学汇编的路过~ 楼主,太不厚道了吧,这种东西要自己做的吧。 第一题:我看了前面几个,是两个操作数的位数对不上,不能这样用的··· 其他的 懒得看了,自己慢慢做吧,给五百分也懒得帮你做了,哪有这样的啊! 楼主好懒。
第3个回答  2012-05-20
八位和十六位寄存器不能同时运算
第4个回答  2013-01-09
哈哈
相似回答