汇编实验五 编写、调试具有多个段的程序

P1

Details

Answer

  1. 如图(不变)
  2. 还是如图 CS=076CH SS=076BH DS=076AH
  3. X-2 X-1

P2

Details

Answer

    1. 如图(不变)
    2. 还是如图 CS=076CH SS=076BH DS=076AH
    3. X-2 X-1
    4. ceil(N/16)*16 //实数除法

P3

Details

Answer

  1. 如图(不变)
  2. 没错,复制粘贴的 CS=076AH SS=076EH DS=076DH
  3. X+3 X+4

P4

程序3

未指定程序入口时,程序默认按照顺序从头开始执行,此时1,2执行的是被当作指令的数据 [heimu title=”你知道的太多了”]whatever..[/heimu]。

……话虽然这么说……但是实际上好像没有出问题。

如果数据对应的是一些人畜无害的指令的话,那可还镇可能不会出什么问题。但是这个东西就和内存泄露、堆栈溢出、缓冲区溢出一样,可能现在不会出问题,以后说不好了。

P5

相加前

相加后

这里直接使用了三个段寄存器来表示三个段,实际上只用一个也可以,就是感觉写起来有点丑。[heimu]或许是强迫症?[/heimu]

P6

[heimu]可以贴源码,但没必要[/heimu]

相加前

相加后

SUMMARY

[heimu]It sucks.[/heimu]

做得比较不舒服的一次实验。

前几章的基础知识部分总结略。

我一直尝试去了解assume 的含义,但是最后也只弄得一知半解,比较难受。目前的理解是,如果assume 的与实际的不符,会引起汇编器的误解,但是文章[1]中只说了变量这一种情况。段的话还是比较好理解的,没有什么问题。

关于end start 具体是如何实现的、应用程序的入口entry point 到底是怎么指定的,我也没能找到合适的对应的资料。我自己也尝试了一下,之前写的代码中,所有的start 改成main 也是没有问题的。感觉下面这个[2]还能勉强解释一下。(TASM 语法)

The Closing

  • The last lines of an assembly language program are the closing
  • Indicates to assembler that it has reached the end of the program and where the entry point is

MAIN  ENDP      ;End of program
      END MAIN  ; entry point for linker use

  • END is a pseudo-op; the single “operand” is the label specifying the beginning of execution, usually the first instruction after the .code pseudo-op

REFERENCE

  1. https://stackoverflow.com/questions/35251407/the-use-of-assume-directive-in-8086-instruction-set
  2. http://www.shsu.edu/~csc_tjm/fall2002/cs272/intro_to_asm.html

CC BY-NC-SA 4.0 本作品使用基于以下许可授权:Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注