8086汇编语言学习笔记
第6章 8086指令系统与汇编基础

第13页
2013年8月1日星期四
第6章
8086指令系统与汇编基础 3.段地址寄存器
有 CS、DS、ES、SS 四 个 , 分 别 表 示 程 序 码 ( code segment register)、 数 据 ( data segment register)、附加(extra segment register)、堆栈 (stack segment register)段地址用。在 DOS 系统 中,每一个段地址容量只有 64KBytes。 当数据段地址不够用时,就可以用附加数据段地址 来补足,例如想要将一个段地址的某些内容复制到 另一段地址中,就可以同时指定 DS、ES 分别表示 这两个段地址。
第17页 2013年8月1日星期四
第6章
6.2.4
8086指令系统与汇编基础
寄存器间接寻址(Register Indirect Addressing) 寄存器间接寻址方式中,操作数存放在存储器 中,但操作数的有效地址EA在基址寄存器BX、BP或 变址寄存器SI、DI中。操作数的物理地址为: 物理地址=16(段寄存器)+(寄存器)
执行结果为:(AX)=8060H 指令中也可指定段跨越前缀以取得其它段中的 数据。如:MOV AX,ES:[BX]指令,则从附加段中 取得数据。
操作码
DS 3000 0 BX + 200 0
代 码
段
30000 32000 AH AL
60 80
3200 0
数 据
段
图 6- 2- 2
例 6 - 5 的执行过程
第3页 2013年8月1日星期四
第6章
8086指令系统与汇编基础
计算机只能识别二进制代码,因此计算机能执行 的指令必须以二进制代码的形式表示,这种以二进制 代码形式表示的指令称为指令的机器码(Machine Code)。 2.汇编指令格式 一条指令一般包含操作码和操作数两部分。
第2章8086微处理器与汇编语言(下)

第二章微处理器与汇编语言(下)
2.3 指令系统
2.4 汇编语言
2.5 汇编语言程序设计
2.6 系统功能调用
2.7 宏指令、条件汇编及上机过程 2.8 模块化程序设计与混合编程
三、指令系统
1. 传送类指令
2. 算术运算类指令
3. 位操作类指令
4. 串操作指令
5. 循环和转移指令 6. 子程序的调用和返回指令 7. 输入输出指令
4. 表达式与运算符 (3)关系运算符 表2-4-3列出的关系运算符。
2. 汇编语言数据
(2)变量(续) ④ 带DUP表达式 DUP是定义重复数据操作符。格式如下:
表达式1是重复次数,表达式2是重复的内 容。例如: D_STR DB3)标号
标号是一条指令目标代码的符号地址。具 有以下三个属性: ● 段属性(SEG) ● 偏移量属性(OFFSET)
1. 传送类指令 (4)标志传送指令(续)
③
标志位进栈
格式:PUSHF
将标志寄存器压入堆栈。标志寄存器中各 标志位本身不受影响。
④
标志位出栈
格式:POPF
将堆栈顶部的内容弹入标志寄存器。
1. 传送类指令 (5)地址传送指令 ① 装入有效地址 格式:LEA DEST,SRC 指令对标志寄存器各位无影响。 ② 装入地址指针 格式:LDS DEST,SRC 或 LES DEST,SRC 指令对标志寄存器各位无影响。
第二章 8086微处理器与汇编语言
(下)
学习目标
1、识记80X86汇编语言指令集、伪指 令和宏、MASM表达式。 2、理解程序设计中顺序、分支、循环、 子程序的基本结构,以及实现方法。 3、识记汇编语言编程、上机调试的基 本方法。 4、识记DOS功能调用和BIOS中断调 用的方法和应用,以及混合编程的概念。
汇编语言指令集合 吐血整理

RET(return)
5.中断
INT(interrupt)指令
IRET(interrupt return)
INTO(interrupt if overflow)
六、处理机控制指令
1.标志处理指令
CLC(Clear carry)
CMC(Complement carry)
STC(Set carry)
CLD(Clear direction)
串比较指令
SCASB(Scan string of byte)
串搜索指令
SCASW(Scan string of word)
串搜索指令
STOSB(Store string of byte)
存串指令
STOSW(Store string of word)
存串指令
LODSB(Load string of byte)
ES(Extra Segment):附加段寄存器。
第一部分:指令助记符: 一、数据传送指令
1.通用数据传送指令 MOV(Move) PUSH(Push onto the stack) POP(Pop from the stack) XCHG(Exchange)
2.累加器专用传送指令 IN(Input) OUT(Output) XLAT(Translate)
REPE(Repeat when empty) 若(CX)=0,则退出,否则 CX=CX+1;
REPZ(Repeat when flag )
若 ZF=0,则退出,否则 CX=CX+1;
REPC(Repeat when carry flag)
REPNE(Repeat when not empty)
REPNZ(Repeat when not zero flag)
汇编语言学习笔记

汇编语言学习笔记《汇编语言》--王爽前言学习汇编目的:充分获得底层编程体验;深刻理解机器运行程序的机理。
原则:没有通过监测点不要向下学习;没有完成当前实验不要向下学习。
第一章基础知识有三类指令组成汇编语言:汇编指令;伪指令;其他符号。
8bit = 1byte = 一个存储单元有n根地址线,则可以寻址2的n次方个内存单元。
1.1节--1.10节小结(1)汇编指令是机器指令的助记符,同机器指令一一对应。
(2)每一种cpu都有自己的汇编指令集。
(3)cpu可以直接使用的信息在存储器中存放。
(4)在存储器中指令和数据没有任何区别,都是二进制信息。
(5)存储单元从零开始顺序编号。
(6)一个存储单元可以存储8个bit,即八位二进制数。
(7)每一个cpu芯片都有许多管脚,这些管脚和总线相连。
也可以说,这些管脚引出总线。
一个cpu可以引出的三种总线的宽度标志了这个cpu不同方面的性能。
地址总线的宽度决定了cpu的寻址能力;数据总线的宽度决定了cpu与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了cpu对系统中其他器件的控制能力。
监测点:1KB的存储器有1024个存储单元?存储单元的编号从0到1023.内存地址空间:最终运行程序的是cpu,我们用汇编编程时,必须要从cpu的角度思考问题。
对cpu来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受cpu寻址能力的限制。
这个逻辑存储器即是我们所说的内存地址空间。
第二章寄存器(cpu的工作原理)mov ax, 2add ax, axadd ax, axadd ax, ax(1)cpu中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;(2)段地址和偏移地址通过内部总线送人一个称为地址加法器的部件;(3)地址加法器将两个16位地址合成为一个20位的物理地址;(4)地址加法器通过内部总线将20位物理地址送人输入输出控制电路;(5)输入输出控制电路将20位物理地址送上地址总线;(6)20位物理地址被地址总线传送到存储器;段地址*16+偏移地址= 物理地址的本质含义内存并没有分段,段的划分来自cpu。
华中科技大学8086汇编讲义第三章宏汇编语言

第三章宏汇编语言每种计算机语言都规定了自己的字符、基本词汇、典型语句和语法规则。
同样,汇编语言也有自己的字符、基本词汇、典型语句和语法规则。
字符:ASCII字符基本词汇:符号指令(MOV、ADD)伪指令(DB、SEGMENT等)典型语句:●机器指令语句——对应机器指令的一种操作。
●伪指令语句——无机器语言与之对应,不生成机器指令。
●宏指令语句——一条宏指令对应多条机器指令,产生一组目标代码。
语法规则:基本语法单位(常量、变量、标号、表达式)前面的例子已介绍了源程序的基本结构、格式、名字的定义、语句格式,下面将更深入地介绍有关语法规则。
3.1表达式汇编程序的语句及程序格式都比较固定,语句中除正确选择操作符之外,主要问题在于正确表示操作数地址,这涉及到寻址方式,可以归结到地址表达式的使用。
表达式:由常数、寄存器、标号、变量加上运算符构成的式子。
3.1.1.常量与数值表达式一.常量常量:从源程序翻译成目标程序期间已经有确定数值的量。
用途:赋值、作立即数、位移量。
由常量与运算符组成的式子。
数值表达式在汇编期间进行运算,结果为常量。
汇编期间允许对常量进行3种运算:1.算术运算包括:+、–、*、/、模除(MOD,取余数)、右移、左移。
2.逻辑运算●逻辑乘:AND(与)●逻辑加:OR(或)●按位加:XOR(异或)●逻辑非:NOT(非)3.关系运算包括:相等(EQ)、不等(NE)、小于(L T)、大于(GT)、小于等于(LE)、大于等于(GE)。
运算结果:关系不成立,结果为0;关系成立,结果为–1(0FFFFH)。
如:N = 50M = (N EQ 50)该关系成立,M =–1。
3.1.2.变量、标号与地址表达式一.变量变量:数据存贮单元的名字。
(存放地址的符号表示)。
变量有三个属性:段、EA、类型。
其中类型由定义时的伪指令确定(DB、DW、DD、DT)。
变量的定义:格式:[变量名] 数据定义伪指令表达式[,…]数据定义伪指令:DB、DW、DD、DQ、DT等。
第三章 8086基本语法

(一)通用传送指令
1)最基本的传送指令 格式:MOV dest,src (B/W)
reg reg
sreg sreg
mem mem
data8/data16 功能: dest src 说明:
(1) dest,src类型要一致,不能同时为内 存单元或同为sreg,至少有一个为寄存器, 决定数据位数;
前缀指令指定可用CS、ES、SS)
串操作目的操作数 ES DI
3)寻址方式
对应不同寻址方式,由形式地址计算EA的 方法不同。16位段偏移量可以是8或16位位 移量(Disp8/Disp16)、寄存器值或位移 量加寄存器值。
1)直接寻址
指令直接提供16位EA ( EA= Disp16) 例:设(DS)=2100H,(CS)=1000H, MOV AL,[0158H] 物理地址=(DS)左移4位+Disp=21158H CS:MOV AX,[0158H] 物理地址=(CS)左移4位+Disp=10158H
FAR:段间转移;NEAR:
段内转移(不改变CS值)。
若转移范围在当前指令的-128~+127内,在 操作数前加SHORT。
例2:段间直接转移寻址
JMP FAR PTR START
2)段内寄存器寻址
指令中寄存器内容是转移地址,适用于段 内转移,寄存器可用通用寄存器。
例:JMP BX ;BX IP
2)物理地址的产生
物理地址:单元地址用20位二进制数表 示,CPU与存储器间数据交换用,唯一的。 范围:00000H~FFFFFH
逻辑地址:由段基值和段内偏移量构成, 以16位二进制数表示,编程时用,不唯 一。偏移量范围:0000H~FFFFH
汇编语言学习笔记段寄存器

汇编语言学习笔记段寄存器一、CPU 的典型构成•CPU 中有很多部件,但一般最主要的有:寄存器运算器控制器 ,如下图是CPU 的主要结构:CPU 的典型构成.png(1)寄存器: 存东西的,比如我们做加法计算 20 + 30 ,那么数据20 和30 先存在寄存器中,在运算器中计算后再存储到寄存器中.CPU 中的寄存器,运算器等部件通过CPU中的控制器(总线)与外面的内存等其他部件相连.•对于程序员来说,CPU中最主要的部件是寄存器,可以通过改变寄存器的内容来实现对CPU的控制.(汇编学的好不好和寄存器学的好不好直接相关)•不同的CPU,寄存器的个数 \ 结构是不同的,8086 是16位的结构的CPU,但是地址总线是20位,可以访问1M的存储空间.•8086 有14个寄存器(都是16位的寄存器(可以存放2个字节))8086的14个寄存器.png二、通用寄存器•AX BX CX DX 这4个寄存器通常用来存放一般性的数据(eg: int a = 10 , int b =10 ) 称为通用寄存器(有时也有特殊用途).•通常,CPU会先将内存中的数据存储到通用寄存器中,然后在对通用寄存器中的数据进行运算.•假如,内存中有块红色内存空间的值是3,现在想把他加1,并将结果存储到内存中的蓝色内存空间,那么处理流程大致如下:数据操作流程.png1.CPU 首先会将红色内存空间中的值放到 AX 寄存器中(通用寄存器)中,即: movax , 红色内存空间 (将右边边红色内存空间的值存到左边AX 中 )2.然后让AX 寄存器(通用寄存器)与1相加.即: add ax ,1 (将右边的值1,与左边AX中的值相加并将结果存入左边AX中)3.最后将值(结果)赋值给蓝色内存空间.即: mov 蓝色内存空间, AX (将右侧AX中的值移动到左侧蓝色内存中)•AX BX CX DX 这4个通用寄存器都是16位的,可以存储2个字节,如下如: 8086通用寄存器.png•注意: 上一代8086 的寄存器都是8位的,为了保证兼容, AX BX CX DX 都可以分为2个8位的寄存器来使用.如下图:通用寄存器的拆分.png高8位低8位的拆分.png三、字节与字•在汇编的数据存储中,有两个比较常用的单位:字节和字. (相当于高级语言中的 int,long,float等数据类型).因此我们在汇编中只能定义两种数据类型的数据,字节类型(byte类型),字类型(word 类型))字节: byte ,1个byte 由8个bit组成,可以存储在8位寄存器中.字:word,1个字由两个字节组成,这两个字节分别称为字的高字节和低字节. •比如数据20000 (4E20H,01001110 00100000B),高字节值78,低字节值32. 字表示.png•1个字可以存储在一个16位寄存器中,这个字的高字节\低字节分别存储在这个存储器的高8位和低8位寄存器中.四、段寄存器•8086 在访问内存时要由相关部件提供内存单元的段地址和偏移地址送入地址加法器合成物理地址•是什么部件提供段地址? 答:段地址在8086的段寄存器中存放. (段segment )代码段寄存器: CS (code segment) 存放代码的数据段寄存器: DS (datasegment ) 存放数据的堆栈段寄存器: SS (stack segment ) 对象放堆里面,局部对象放栈里面附加段寄存器: ES (Extra segment)8086段寄存器.png•8086 有4个段寄存器,CS DS SS ES,当要访问内存时由这4个段寄存器提供内存单元段地址.•每个段寄存的具体作用是什么呢?一旦程序运行装载到内存当中,所有的代码\全局变量\局部变量\对象都装载到了内存当中,所以内存当中存在具体的代码和数据,也存在堆栈等等 ,那么CPU想访问内存段代码,那么他会访问法代码段寄存器,如果CPU想想问堆栈中的数据那么他会访问栈寄存器,依次类推就是这样的.。
x86汇编语言:从实模式到保护模式笔记(二)

x86汇编语⾔:从实模式到保护模式笔记(⼆)1.我们都知道,8086可以访问1MB内存,其中,0xF0000~9FFFF属于常规内存,由内存条提供;0xF0000~0xFFFFF由主板上的⼀个芯⽚提供,即ROM-BIOS。
这样⼀来,中间还有⼀个320KB的空间,即0xA0000~0xEFFFF。
传统上,这段地址空间由特定的外围设备来提供,其中就包括显卡。
因为显⽰功能对于现代计算机来说实在太重要了。
2.由于历史原因,所有在个⼈计算机上使⽤的显卡,在加电⾃检之后都会把⾃⼰初始化到80*25的⽂本格式。
在这种模式下,屏幕上可以显⽰25⾏,每⾏80个字符(⼀个字符两个字节组成)。
每屏总共2000个字符(4000字节)。
3.⼀直以来,0xB8000~0xBFFFF这段物理地址空间,是留给显卡的。
tip:不允许将⽴即数传送到段寄存器。
4.屏幕上的每个字节对应着显存中的两个连续字节,前⼀个是字符的ASCLL代码,后⾯是字符的显⽰属性,包括字符颜⾊(前景⾊)和底⾊(背景⾊)。
字符的显⽰属性(1字节)分为两部分,低4位定义的是前景⾊,⾼4位定义的是背景⾊。
格式:K R G B + I R B G(K是闪烁位,为0时不闪烁,为1时闪烁;I是亮度位,为0时正常,为1时⾼亮)RGB:(000⿊;001蓝;010绿;011青;100红;101品红;110棕;111⽩)tip:mov指令的⽬的操作数不允许为⽴即数,⽽且,⽬的操作数和源操作数不允许同时为内存单元。
5.在源程序的编译阶段,编译器会把源程序整体上作为⼀个独⽴的段来处理,并从0开始计算和跟踪每⼀条指令的地址。
因为该地址是在编译期间计算的,故称汇编地址。
汇编地址是在源程序编译期间,编译器为每条指令确定的汇编位置,指⽰该指令相对于程序或者段起始处的距离,以字节计。
当编译后的程序装⼊物理内存后,它⼜是该指令在内存段内的偏移地址。
6.在NASM汇编语⾔中,每条指令的前⾯都可以拥有⼀个标号,以代表和指⽰指令所在的汇编地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
后转到寄存器所指的 ip 处执行。
call word ptr 内存单元地址:把本指令(指 call word ptr 内存单元地址)下一
条指令的 ip 压入 sp,然后转到内存单元地址所指的 ip 处执行。
call dword ptr 内存单元地址:把本指令(指 call dword ptr 内存单元地址)下
7、如果某个地址的段地址是 ds,偏移地址是 bx+200,则要将这个位置的数据传到
ax 中,可以这样:
mov ax,[bx+200]或者 mov ax,200[bx]或者 mov ax,[bx].200
偏移地址也可以改为 bx+si 或者 bx+di,此时的格式:
mov ax,[bx+si]或者 mov ax,[bx][si]
(ax)/((es)*16+0)的余数
div word ptr [bx+si+8],该指令的结果:(ax) =
[(dx)*10000H+(ax])/((ds)*16+bx+si+8)的商,(dx) =
[(dx)*10000H+(ax])/((ds)*16+bx+si+8)的余数
div bx,该指令的结果:(ax) = [(dx)*10000H+(ax])/(bx)的商,(dx) =
或者 mov ax,126 e 1000:0000 01 02 03 04,表示将 01 02 03 04 顺序填入 1000:0000 表示的内存处 u 1000:0,可以查 1000:0 内存处的数据及其对应汇编指令 t,执行 cs:ip 寄存器所指的指令 g 0012,从 cs:ip 执行到 cs:0012 处,中间不停顿 p ,遇到 loop 循环,则一次把所有循环执行完再退出。 二、各寄存器的作用 1、ax,bx 等一般寄存器,可暂存数据 2、cs,ip 下一条要执行的指令存储在 cs 为段地址,ip 为偏移地址的内存中 3、ds 数据段寄存器,比如 mov al,[0],表示将 ds:0 这个内存中的数字传入 al 中。 要将内存 10000H 中的数传入 al 中,则应该这样: mov ax,1000 mov ds,ax ,因为不能直接 mov ds,1000 mov al,[0],寄存器 al 若为 16 位,则内存中有一个字要移入 al,要是为 32 位,
15、子程序调用中的参数及返回值
当参数或者返回值只有 1 个或者 2 个时,可以把参数及返回值放到寄存器当中,但
是当参数及返回值有 N 个时,则把批量数据放到内存中,然后把它们所在内存空间的
首地址放在寄存器中
,然后传递给需要的子程序或者主程序。当然也可以用堆栈来传递参数及结果。
16、mul 指令
围为:-128~127
loop 标号:(cx)=(cx)-1,如果(cs)!=0,则转到标号处开始执行,否则顺序向下执
行。此处转移条件和 jcxz 正好相反。
12、ret 和 retf 指令
ret 指令后,(ip)= (sp),(cs)不变,然后(sp) = (sp ) +2,该指令实现近转移,
则内存中有 2 个字要移入 al mov bl,[ax],将 ds:ax 表示的内存的字节传入 bl 寄存器中 mov bx,[ax],将 ds:ax 表示的内存的字传入 bx 寄存器中 4、ss,sp ss 存储堆栈段的段地址,sp 存储堆栈段的偏移地址,push 和 pop 指令涉及到的内
改 CS 和 IP。
jmp 16 位寄存器:其中 IP 地址放在 16 位寄存器中。
jmp word ptr 内存单元地址:其中内存单元地址存放的是 IP 的值。假如 ds:[0]这
个内存单元值为 0123H,则 jmp word ptr ds:[0]表示下一条指令执行地址为
cs:0123H
jmp dword ptr 内存单元地址:其中内存单元地址存放着 2 个字,高地址为 CS,低
地址为 IP。比如:
mov ax,0123H
mov ds:[0],ax
mov word ptr ds:2,0
jmp dword ptr ds:[0] 执行后,(CS)=0,(IP)=0123H
如 inc word ptr ds:[0] 用 byte ptr 标明这是字节操作,这是在 masm 中的用法,比如 inc byte ptr ds:[0] c、push [1000H],不用指明,直接进行字操作
四、各种指令 1、mov,移动,比如 mov ds,ax 将 ax 中的数据移入 ds 中 2、add,加法,比如 add ax,bx,将 bx 中的值与 ax 中的值相加并存入 ax 中 3、sub,减法,比如 sub ax,bx,将 ax 中的值减去 bx 中的值并存入 ax 中 4、push,入栈,比如 push ax,将 ax 寄存器中的值压入堆栈 ss:sp 指向的内存当中,
[(dx)*10000H+(ax])/(bx)的余数
9、jmp 指令
a、jmp short 标号:段内短转移,只能在一个段内转移,并且转移的距离范围是
-128~127
jmp near ptr 标号:段内近转移,转移距离为-32768~32767
jmp far ptr 标号:段间转移,far ptr 指明了指令用标号的段地址和偏移地址修
并把 sp 的值改为 sp-2(这是在 8086 当中,因为 ax 是 16 位寄存器,而内存单元为 8 位,因此一个寄存器的值要用两个内存 单元来存放) 5、pop,出栈,比如 pop ax,将 ss:sp 指向的内存的值送入 ax 中,并把 sp 的值改 为 sp+2 pop [0],将 ss:sp 内存中的数据弹出到 ds:0 内存中,注意 pop 操作是字为单位的操 作 6、注意 push 和 pop 指令中的超栈的界限问题 7、inc bx 将 bx 中的值加 1。 8、dec bx 将 bx 中的值减 1。和 inc bx 正好相反。 五、microsoft asm 格式下的各种命令: 0、一个程序要编译运行的基本架构: assume cs:code code segment start: .... mov ax,4c00H int 21H code ends end 这几行是基本的,不然程序无法编译运行。 1、程序完后要输入 mov ax,4c00H int 21H 帮助程序返回。 2、利用 loop 实现循环 mov cx,11,将 cx 寄存器值置为 11 s:add ax,ax,执行 ax=ax+1 add bx,bx,执行 bx=bx+1 loop s,执行 cx=cx-1,cx==0,则往下,cx!=0,则转到 s 标记的内存地址中继续 执行 3、在汇编程序中,数据不能由字母开头,故 mov ax,FFFFH 不合法,要改为 mov ax,0FFFFH 4、debug 中 mov ax,[0]表示将 ds:[0]内存中的值送入 ax 中 在 masm 汇编源程序中, mov ax,[0],表示将 0 送入 ax 中 在源程序中可修改为:mov ax,ds:[0]或者 mov ax,[bx]或者 mov ax,cs:[0]这里的 cs,ds 就是显示的指定段寄存器,一般默认段寄存器为 ds 5、end start 在 masm 中表示汇编程序在 start 指定的地方开始执行,要是 end d, 则表示在 masm 中汇编程序在 d 标号指定的地方开始执行
mul bl,mul byte ptr ds:[0],表示进行的是 8 位乘法,其中乘数放在 al 中,被乘
数放在 bl 或者内存单元中,结果放在 ax 中
mul bx,mul word ptr ss:[0],表示进行的是 16 位乘法,其中乘数放在 ax 中,被乘
数放在 bx 或者内存单元中,结果存放方式为:
10、jcxz 指令
这是有条件转移指令,所有的有条件转移指令都是短转移,即在段内转移。该指令
对 IP 的修改范围为:-128~127
jcxz 标号:如果(cs)=0,则转到标号处开始执行,否则顺序向下执行。
11、loop 指令
这是循环指令,所有的循环指令都是短转移,即在段内转移。该指令对 IP 的修改范
即弹出堆栈 sp 中的值作为 ip 的值
retf 指令后,(ip)= (sp),(cs)= (sp)+2,然后(sp) = (sp)+4,即先弹出 ip 的值,
再弹出 cs 的值,即保存时先 push cs,再 push ip,该指令实现远转ll 标号:把本指令(指 call 标号)下一条指令的 ip 压入 sp,并转到标号处执行。
存就是 ss:sp 指向的内存 5、cx 计数寄存器,主要是存储循环程序要循环执行的次数。存放程序在内存中的
长度? 6、注意段寄存器 cs,ds,ss 均不能直接将数据输入。 7、在 mov ax,[si+di]这个[。。。]省略号只能填入如下四个寄存器:bx,si,di,bp,
其余的比如 ax,cx,dx 均是错误的,要是 ss,cs,ds,更是错误的。 在[。。。]中使用 bp,则段地址默认为 ss,显性指示段地址除外。 三、内存相关部分参见二 1、 a、mov al,[ax],其中的 al 指明是字节操作,即一次只移动一个字节的内存 mov ax,[0],其中的 ax 指明是字操作,即一次移动一个字的内存 b、若没有寄存器,则可以使用 word ptr 标明是字操作,这是在 masm 中的用法,比
高位放在 dx 中,低位放在 ax 中,其值为 dx*16+ax