汇编语言复习~作业二

2021/6/7 20:51:11

本文主要是介绍汇编语言复习~作业二,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

作业二

1.下列寄存器经常用来存储偏移量,它们的缺省段寄存器是哪些寄存器?
在这里插入图片描述

  • (a)SP:栈顶指针寄存器,缺省的段寄存器是SS,即栈的段地址寄存器。
    (b)通用寄存器BX,缺省的段寄存器为DS,即数据段寄存器。
    (c)DI为目的变址寄存器,缺省的段寄存器为ES
    (d)BP:栈底指针寄存器,缺省的段寄存器同样是SS。
    (e)SI:源变址寄存器,缺省的段寄存器为DS。
    注意DI和SI,这两个寄存器在80386中都是16-bit寄存器,且不可以被拆分成两个8-bit寄存器,它们一个缺省的段寄存器为ES,一个为DS。

2.下列指令的操作是什么?
在这里插入图片描述

  • 没什么可说的,基本的堆栈操作,注意PUSHFD和PUSHD 4。

3.汇编语言的先行词
在这里插入图片描述

  • 同样没什么可说的,从答案中学习即可。先行词可以理解为汇编语言的伪助记符。
  • 先行词:
    ① 汇编编译器能够识别并执行的命令
    ② 不属于Intel指令集
    ③ 用来声明代码区,数据区,选择内存模式,声明子程序等
    ④ 大小写不敏感
    ⑤ 不同汇编编译器使用不同的先行词

4.辨别跳转类型:
在这里插入图片描述

  • 短跳转指的是在256个字节内进行跳转。最短,次短为近跳转,在一个段中进行跳转。远跳转可以跳往任意地址,甚至是当前段外。

5.使用REPEAT-UNTIL结构,将段A中的内容拷贝到段B。
在这里插入图片描述

  • 通过OFFSET获取数组(汇编语言中数据块中的一个数据段)的起始地址。
  • 注意,此处将BLOCKA的地址放到SI中,从BLOCKA中取出数,放到BLOCKB中,把BLOCKB的地址放到DI中。
  • LODSB指令的功能是,从SI所存内容的地址下逐一读取信息,送入AL当中,SI自动增加数据长度大小,以读取数组中的下一个下标处的信息。STOSB指令的功能是,从AL中读取信息,存放到DI所存内容的地址下,DI同时改变。
  • .Until:当读出的内容为0时,说明这个段读取完毕了,结束。
  • 正确的答案应是:
MOV SI,OFFSET BLOCKA
MOV DI,OFFSET BLOCKB
.REPEAT
	LODSB
	STOSB
.UNTIL AL == 0

6.使用8086指令编写汇编程序,计算:
在这里插入图片描述

  • AX作为累加器,存放最终结果。
  • BX存放2n,实现2n的方法是,每次自己和自己相加。
  • CX存放loop的循环次数,由于有9个数,因此循环9次。

7.写段程序,从键盘读入字符,并在屏幕上显示出来。
在这里插入图片描述

  • 在前面的实验1中有所提及。AH和INT 21H的组合可以实现各种各样的功能。

8.乘法指令。
在这里插入图片描述

  • 重申一下乘法指令MUL。在8086汇编语言中,MUL指令只有8-bit乘法和16-bit乘法,完全是根据MUL后面的操作数来决定进行几位乘法。如果进行8位乘法,那么将操作数和AL中的内容相乘,得到的结果存放在AX中。当然是AH存放结果的高八位,AL存放结果的低八位。如果进行16-bit乘法,那么是将操作数和AX中的内容相乘,结果的高16位存放在DX中,低16位存放在AX中。

9.机器码和汇编语句的转换:
在这里插入图片描述

  • (a)MOV AX,[BX]
  • (b)8B7702

10.Figure1(第十题)是一个存储系统组,可以使微处理器通过8-bit地址总线访问它的64K字节空间。
在这里插入图片描述
在这里插入图片描述

  • (a)输出端口号为 1111 1111 = 256。
  • (b)寻址能力:8根地址总线,因此其寻址能力为28 = 256,可访问内存28×8bit。
  • (c)从c开始下面应该都是作业2中最难的。
    我们需要先知道,语句IN 9FH,0FFH(或者OUT 0FFH,9FH,二者等价)是将第四片的片选信息读入,地址实际上是1FF0H,写成二进制就是0001111111110000B,前三个位置都是0,我们用这三个位置进行3-8译码,以进行片选,因此100代表的就是第四片,所以这个位置的片选信息就是9FH。用IN或者OUT载入9FH后,即可对后面的0F0H地址处的信息进行修改。因此,将A送入第四片1FF0位置的操作就是:
IN 9FH,0F0H
MOV byte ptr [0F0H],41H

这个IN 9FH,0F0H的操作是汇编语言的规定,没有原因,记住就好。

  • (d)同样,第五片的地址写作二进制为0000000000001000B,前三位作为片选,应该是101,因此IN操作为IN A0H,0FFH,之后读出10H的第一个字节,没有指明读出到哪,我们指定它读出到AL,则代码为:
IN A0H,0FFH
MOV AL,[10H]
  • (e)应该是最难的。从第四片的1FF0H一直读到第五片0010H。中间要更换片选信息,因此在第四片读完的时候,要更换IN至第五片。什么时候读完?当第四片的地址F0H增加到FFH之后,更换至第五片即可。此处不给出具体的实现方式了,因为徐迟老师上课的时候讲解的代码是有瑕疵的。总之,会IN读入片选信息的操作,什么类型的题目都是可以解决的。


这篇关于汇编语言复习~作业二的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程