汇编编程

来源:互联网 发布:centos共享文件夹 编辑:程序博客网 时间:2024/05/23 11:52

1.DOS中的程序运行

DOS是一个单任务的操作系统

  一个程序P2的可执行文件,则必须有一个正在运行的程序P1,  将P2的加载到内存,将CPU的控制权交给P2,P2才得以运行。

P2开始运行后,p1暂停运行, 当P2运行完毕后,应将CPU的控制权交还给使得他运行的程序P1,使得继续运行。

2.程序的返回

 在程序的末尾添加程序段

mov ax,4c00H

int 21H


3.将数据、代码、栈放入不同的段

assume cs:code,ds:data,ss:stack


data  segment
dw 0123H,0456H
data  ends


stack  segment
dw 0,0
stack  ends


code  segment
start:
mov ax,stack
mov ss,ax
mov sp,4

mov ax,data
mov ds,ax  ; 引用 ds:[1]

mov bx,0
mov cx,2

s: push [bx]  ;基于 ds的偏移 ds:[bx]
add bx,2
loop s

mov bx,0

mov cx,2

s0: pop ds:[bx]
add bx,2
loop s0

mov ax,4c00H
int 21H



code  ends
end  start


用 cs:code  会把code的指令连接到代码段

     ds:data 会把data的指令连接到数据段

     ss:stack 会把stack的指令连接到栈端

这个任务由编译器通过伪指令来完成

Q:CPU是如何知道去执行它们的呢?

  A:我们在源程序的最后用" end  start" 说明程序的结束,已经 "start" 标明的程序的入口,

这个入口将被写入可执行文件的描述信息,可执行文件被加载到内存后,CPU的CS:IP被设置执行这个入口,从而开始执行程序中的第一条指令。

注意start入口 写在执行指令的前面  如果再 data段中,他会把数据段的指令当做指令来执行  就会出现错误.

如果去掉前面的start 则上面的程序是不正确的。 CPU就会把第一个 dw 0123H,0456H  当做代码段来执行,如果code segment在最前面  那就是正确的,建议都加上伪指令。



原创粉丝点击