汇编语言——第一个程序

汇编程序软件:emu8086
当然使用masm和link也挺好。


assume cs:codesg

codesg segment
    
    mov ax,2000h
    mov ss,ax
    mov sp,0
    add sp,10
    pop ax
    pop bx
    push ax
    push bx
    pop ax
    pop bx
    
    mov ax,4c00h
    int 21h

codesg ends

end

说明

  1. assume cs:codesg
    将特定用途的段和相关的寄存器关联起来。
    codesg为段名
  2. segment…ends
    成对使用。定义一个段。表示段的开始和结束。
  3. mov ax,4c00h
    int 21h
    (终端)程序返回。
  4. end
    汇编程序的结束标志。

结果如下:
可以整体或分步运行,可以同时看到寄存器的状态etc。
在这里插入图片描述
一个源程序写出到执行的过程
编程 —>.asm —> 编译 —> .obj —> 连接 —> .exe —> 加载 —> 内存中的程序 —> 运行

使用汇编语言编译程序对源文件中的源程序进行编译,产生目标文件;再用连接程序对目标文件进行连接,生成可执行文件。

汇编语言编译程序??世界上第一个编译器是怎么来的?
连接程序??哈哈

伪指令

汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终由CPU所执行。而伪指令没有对应的机器指令,最终不被CPU所执行。那谁来执行伪指令呢?伪指令由编译器来执行,编译器根据伪指令来进行相关的编译工作。
(上面代码中:段名,end,ends都是伪指令)

执行
谁来执行的问题。
一个程序将咱们要运行的程序掉入内存之后,就完事了?
计算机中CPU是老大。老大每次从CS:IP位置开始执行程序。
所有调入程序后,CS和IP的值要修改。修改成程序再内存中的位置。(但是程序在内存中什么位置? ) 该程序执行完之后,得返回。如何返回?所有改程序在调入之前是不是还得保存当时得现场。