一些汇编指令(基于8086)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 一些汇编指令(基于8086)

一些汇编指令(基于8086)

 2014/12/26 23:19:45  Anthony.Zhao  程序员俱乐部  我要评论(0)
  • 摘要:回头看了下汇编,简单总结一些备忘,大部分内容在《王爽汇编语言第二版》中有更为详细的介绍,建议下载,比起某些教授抄书出版的内容,王爽先生的文章何止优秀百倍mov(1)数据送寄存器;(2)寄存器送寄存器;(3)内存单元送寄存器;注意:1.内存不能送内存2.内存不能送段寄存器;例:将al中的数据送入内存单元10003H分析:默认数据的寄存器是DS,所以只要我们设置ds的值后,使ds*16+[数据索引]=10003即可。程序:movbx,1000Hmovds,bxmov[3],al另一种答案
  • 标签:汇编

回头看了下汇编,简单总结一些备忘,大部分内容在《王爽汇编语言第二版》中有更为详细的介绍,建议下载,比起某些教授抄书出版的内容,王爽先生的文章何止优秀百倍

mov

(1)数据送寄存器;

(2)寄存器送寄存器;

(3)内存单元送寄存器;

注意:

1.内存不能送内存

2.内存不能送段寄存器;

例:

将al中的数据送入内存单元10003H

分析:默认数据的寄存器是DS,所以只要我们设置ds的值后,使ds*16+[数据索引] = 10003即可。

程序:

mov bx,1000H

mov ds,bx

mov [3],al

另一种答案:

mov bx,FFFH

mov ds,bx

mov [13],al

 

 

PUSH(入栈)

POP (出栈)

push ax:将寄存器ax中的数据送入栈中;

pop ax :从栈顶取出数据送入ax。

8086CPU的入栈和出栈操作都是以字为单位进行的

 

jmp short 标号

(IP)=(IP)+8位位移。

jmp near ptr 标号

它实现的是段内近转移。

指令“jmp near ptr 标号”的功能为:

(IP)=(IP)+16位位移。

 

jmp far ptr 标号

实现的是段间转移,又称为远转移

(IP)=(IP)+32位位移。

mov ax,0123H

mov ds:[0],ax

jmp word ptr ds:[0]

执行后,(IP)=0123H

mov ax,0123H

mov [bx],ax

jmp word ptr [bx]

执行后,(IP)=0123H

 

 

ret 和retf

ret

将栈中数据pop至IP中,具体操作如下:

(IP)=((ss)*16+(sp))

(sp)=(sp)+2

将栈中sp指针处的值放入到IP中,同时栈指针往栈底移动两byte(栈是从高位往地位分配的,所以取出一个数据要增加2)

retf:(return far)

(IP)=((ss)*16+(sp))

(sp)=(sp)+2

(CS)=((ss)*16+(sp))

(sp)=(sp)+2

 

 

call指令 (一般和ret配合使用)

 

call 标号(将当前的 IP 压栈后,转到标号处执行指令)

CPU执行此种格式的call指令时,进行如下的操作:

(sp) = (sp) – 2

((ss)*16+(sp)) = (IP)

(IP) = (IP) + 16位位移

16位位移=“标号”处的地址-call指令后的第一个字节的地址;

16位位移的范围为 -32768~32767,用补码表示;

16位位移由编译程序在编译时算出

call相当于:

push IP

jmp near ptr 标号

 

call far ptr 标号:

(1) (sp) = (sp) – 2

((ss) ×16+(sp)) = (CS)

(sp) = (sp) – 2

((ss) ×16+(sp)) = (IP)

(2) (CS) = 标号所在的段地址

(IP) = 标号所在的偏移地址

相当于进行:

push CS

push IP

jmp far ptr 标号

发表评论
用户名: 匿名