|

楼主 |
发表于 2014-8-23 20:48:39
|
显示全部楼层
以下是我看了程序之后的一点注解,请各位大神指导一下对错
assume cs:code
code segment
start:
mov ax,2000h ;ax =2000
mov ds,ax ;ds=2000(段地址)
mov bx,0h ;bx=0
mov ax,cs ;ax=cs (当前程序段地址)
mov es,ax ;es=cs(将程序段地址存入附加段中)
mov si,offset s ;(将si的值等于我们所要存储指令s的偏移地址中)
mov cx,offset s1-offset s ;(cx=循环次数,等于所需存储的指令的字节/字所需的内存空间大小)
s0: mov ax,cs:[si+bx] ;(将cs:[si+bx]中的数据存入ax中,即将所需要存储的数据存入20000H,20002H)
mov [bx],ax ;(bx=程序段偏移地址)
add bx,2 ;(bx=bx+2,存储下一个数据[si+bx]做准备)
loop s0 ;(循环跳转到s0,因为每次只能存储2字节,所以,循环cx次,cx为16位(2字节))
jmp short s1 ;(跳转到s1,跳过我们所需要存储的指令,因为不执行)
s: mov ax,2 ;(这里我有个疑问,mov指令是2字节,好像有的命令需要1字节或3字节这边的bx=bx+2不就有点小问题了?)
mov bx,3
s1: nop ;(无操作,主要是为了offset s1-offset s)
mov ax,4c00h ;(中断类型为ah=4c)
int 21h ;(调用21号中断)
code ends
end start
|
|