当前位置:文档之家› 汇编语言笔记 王爽教程

汇编语言笔记 王爽教程

汇编语言笔记 王爽教程
汇编语言笔记 王爽教程

汇编语言笔记王爽教程

第一章基础知识

1. 汇编指令是机器指令的助记符,同机器指令一一对应。

2. 每一种CPU都有自己的汇编指令集。

汇编语言发展至今,由以下三类指令组成:

1汇编指令:机器码的助记符,有对应的机器码;

2伪指令:没有对应的机器码,由编译器执行,计算机并不执行;

3其他符号:如:+,--,*,/等,由编译器识别,没有对应的机器码。

3. CPU可以直接使用的信息在存储器中存放。

4. 在存储器中指令和数据没有任何区别,都是二进制信息。

5. 存储单元从零开始顺序编号。

6. 一个存储单元可以存储8个bit(用作单位写为“b”),即8位二进制数

7. 1B=8b 1KB=1024b 1MB=1024KB 1GB=1024MB 1TB=1024GB

8. 每一个CPU芯片都有许多管脚,这些管脚和总线相连,也可以说这些管脚引出总线。一个CPU可以引出总线的宽度标志了这个CPU的不同方面的性能:

V地址总线的宽度决定了CPU的寻址能力;

Vv数据总线的宽度决定了CPU与其他器件进行数据传送时的

一次数据传送量;

Vvv控制总线的宽度决定了CPU对系统中其他器件的控制能力;

9. 在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,这些器件通过总线相连。这些器件有:CPU,存储器,外围芯片组,扩展插槽等。扩展插槽上一般插有RAM内存条和各类接口卡。

10. CPU对外部设备都不能直接控制,直接控制这些设备进行工作的是插在扩展插槽上的接口卡。扩展插槽通过总线和CPU相连,所以接口卡液通过总线同CPU相连。即CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。

11. 随机存储器RAM,可读可写,但是必须带电存储,关机后存储的内容丢失;只读存储器ROM,只能读取不能写入,关机后其中的内容不丢失。

存储器从功能和连接上分为:

* 随机存储器:用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由装在主板上的RAM和插在扩展插槽上的RAM组成。

* 装有BIOS的ROM:BIOS是由主板和各类接口卡厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。

* 接口卡上的RAM:某些接口卡需要对大批量输入,输出数据进行暂时存储,在其上装有RAM。典型如显示卡上的RAM,一般称为显存,我们将需要显示的内容写入显存,就会出现在显示器上。

12. 对CPU 来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。

第二章寄存器(CPU工作原理)

1. 所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址,CPU通过地址总线送入存储器的必须是一个内存单元的物理地址

2. 8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。

3. 8086CPU在内部用两个16位地址合成的方法形成一个20位的物理地址,地址加法器采用:物理地址=段地址×16+偏移地址的方法用段地址和偏移地址合成物理地址。其本质含义为:CPU在访问内存时,用一个基础地址和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

4. 段地址在8086CPU的段寄存器中存放,当8086CPU要访问内存时,由段寄存器提供内存单元的段地址,8086CPU有4个段寄存器,其中CS用来存放指令的段地址。

5. CS存放指令的段地址,IP存放指令的偏移地址。

8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。

6. 8086CPU的工作过程:

(1).从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;

(2).IP 指向下一条指令;

(3).执行指令。(转到步骤(1),重复这个过程)

7. 8086CPU提供转移指令修改CS,IP的内容。

第三章寄存器(内存访问)

1. 字在内存中存储时,要用两个地址连续的内存单元存放,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中

2. 用mov指令要访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。

3. 【address】表示一个偏移地址为address的内存单元。

4. 在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器相对应。

5. mov ,add ,sub 是具有两个操作对象的指令,jmp是具有一个操作对象的指令。

6. 8086CPU提供了栈操作机制,方案如下:

在SS,SP中存放栈顶的段地址和偏移地址;

提供出栈和入栈指令,他们根据SS:SP提示的地址,按照栈的方式访问内存单元。

7. push指令的执行步骤:1. SP=SP-2 ; 2. 向SS:SP指向的字单元中送入数据。

8. pop指令的执行步骤:1. 从SS:SP指向的字单元读取数据;2. SP=SP+2;

9. 任意时刻,SS:SP指向栈顶元素。

10. 8086CPU只记录栈顶,栈科技的大小我们要自己管理。

11. 用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈的顺序相反。

12. push 和pop实质上是一种内存传送指令,注意他们的灵活应用。

13. 段的综述

我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元,这完全是我们自己的安排。

我们可以用一个段存放数据,将它定义为“数据段”;

我们可以用一个段存放代码,将它定义为“代码段”;

我们可以用一个段当作栈,将它定义为“栈段”;

我们可以这样安排,但是若要让CPU按照我们的安排来访问这些段,就要:

对于数据段,将它的段地址放在DS中,用mov ,add ,sub 等访问内存单元的指令时,CPU就将我们定义的数据段中的内容当作数据来访问;

对于代码段,将它的段地址放在CS中,将段中的第一条指令的偏移地址放在IP中,这样CPU就将执行我们定义的代码段中的指令;

对于栈段,将它的段地址放在SS中,将栈顶单元的偏移地址放在SP中,这样CPU在需要进行栈操作的时候,比如执行push ,pop指令等,就将我们定义的栈段当作栈空间来使用。

可见,不管我们如何安排,CPU将内存中的某段内容当作代码,是因为CS:IP指向了那里;CPU将某段内存当作栈,是因为SS:SP 指向了那里。

14. 一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关键在于CPU中寄存器的设置,即:CS IP ,SS SP ,DS的指向。

第四章第一个程序

汇编语言从写出到执行的简要过程:

第一步编写汇编源程序

结果产生了一个存储源程序的文本文件

第二步对源程序进行编译连接

编译生成目标文件————连接生成可执行文件

可执行文件包含两部分内容:

¥. 程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)

¥. 相关的描述信息(比如,程序有多大,要占用多少内存空间等)

这一步工作的结果是产生了一个可在操作系统中运行的可执行文件

第三步执行可执行文件中程序

操作系统依照可执行文件中的描述信息,将可执行文件中机器码和数据加载入内存,并进行相关的初始化(比如设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。

程序加载后,cx中存放的是程序的长度,DS中存放着程序所在内存区的段地址,这个内存区的偏移地址为0,则程序所在的内存区的地址为DS:0;

这个内存区的前256个字节中存放的是PSP ,DOS用来和程序进行通信。从256字节处向后的空间存放的是程序。

第五章【BX】和loop指令

1. 完整地描述一个内存单元需要两种信息:¥.内存单元的地址;¥.内存单元的长度(类型)

2. loop 标号,CPU执行loop指令的时候,要进行两步操作:¥.(cx)=(cx)-1;¥.判断CX中的值,不为零则跳转至标号处执行程序,如果为零则向下执行。标号代表一个地址。

3. 用CX和loop指令相配合实现循环功能要点:

(1)在CX中存放循环次数;

(2)Loop指令中的标号所标识地址要在前面;

(3)要循环执行的程序段,要写在标号和loop指令的中间。

第六章多个段

1. 可执行文件中的程序执行过程:

¥. 由其他的程序(debug,command或其他程序)将可执行文件中的程序加载入内存;

¥. 设置CS:IP指向程序的第一条要执行的指令(即程序的入口),从而使程序得以运行;

¥. 程序运行结束后,返回到加载者。

end start 指明的程序入口,被转化为一个入口地址,存储在可执行文件的描述信息中。

第七章内存定位

1.¥. and 逻辑与指令,按位进行与运算

通过该指令可将操作对象的相应位设为0,其他位不变

将AL的第六位设为0:and al,10111111B

¥. Or 逻辑或指令,按位进行或运算

通过该指令可将操作对象的相应位设为1,其他位不变

将AL的第六位设为1:or al,01000000B

2. A :41H,01000001B ;a : 61H,01100001B.

就ASCII码的二进制形式来看,除第5位外,大写字母和小写字母的其他各位都一样。

大写字母的ASCII码第五位为0,小写字母的第五位为1.

4. SI和DI是8086CPU中和bx功能近似的寄存器,SI和DI不能够分成两个8位寄存器来使用。

第八章数据处理

1. 四个寄存器:BX SI DI BP 这四个寄存器可以单个出现,或只能以四种组合出现:BX和SI ,BX和DI ,BP和SI ,BP和DI。使用寄存器BP,而指令中没有显性地给出段地址,段地址就默认在SS中。

Mov ax,[bp] : (ax)=((ss)*16+(bp))

Mov ax,[bp+si+idata] : (ax)=((ss)*16+(bp)+(si)+idata)

2. 数据处理:读取,写入,运算。

机器指令并不关心数据的值是多少,而关心指令执行前一刻,它将要处理的数据所在的位置。指令在执行前,所要处理的数据可以在三个地方:CPU内部,内存,端口

Mov bx,[0] 内存,ds:0单元

Mov bx,ax CPU内部,ax寄存器

Mov bx,1 CPU内部,指令缓冲器

3. 8086CPU的指令,可以处理两种尺寸的数据,byte 和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。

¥. 通过寄存器名指明要处理的数据的尺寸;

¥. 没有寄存器名存在的情况下,用操作符byte ptr 和word ptr指明内存单元的长度

4. DIV除法指令,使用时需知:

¥. 除数:有8位和16位两种,在一个寄存器或内存单元中

¥. 被除数:除数为8位:被除数为16位,默认在AX中存放;

除数为16位:被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。

¥. 结果:如果除数为8 位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

5. dup操作符,同db,dw,dd等一样,是由编译器识别处理的符号。它是和db,dw,dd等数据定义伪指令配合使用的,用来进行数据的重复。

Db/dw/dd 重复的次数dup (重复的字/字节/双字数据)

Db 3 dup (…abc?, …ABC?)

第九章转移指令

1. 转移指令:可以控制CPU执行内存中某处的代码的指令。

8086CPU的转移行为分为:

¥. 只修改IP时,称为段内转移,如:jmp ax。

*短转移:IP的修改范围-128——127

*近转移:IP的修改范围-32768——32767

¥.同时修改CS和IP 时,称为段间转移,如:jmp 1000:0。

8086CPU的转移指令分为:

¥. 无条件转移指令(如:jmp)

¥. 条件转移指令

¥. 循环指令(如:LOOP)

¥. 过程

¥. 中断

2. offset操作符,在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。

Mov ax,offset start ;取得标号start的偏移地址,送ax

3. 依据位移进行转移的JMP指令

Jmp short 标号(转到标号处执行指令)

实现的是段内转移,它向前转移时可以最多超过128个字节,向后转移可以最多越过127个字节。

“标号”是代码段中的标号,指明了指令要转移的目的地,转移指令结束后,CS:IP应该指向标号处的指令。

指令“jmp short 标号”的功能为:(IP)=(IP)+8位位移

(1)8位位移=“标号”处的地址-jmp指令后的第一个字节的地址;

(2)short指明此处的位移为8位位移;

(3)8位位移的范围为-128——127,用补码表示;

(4)8位位移由编译程序在编译时算出。

指令“jmp near ptr 标号”功能:(IP)=(IP)+16位位移

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

(2)near ptr指明此处的位移为16位位移,进行的是段内近转移;

(3)16位位移的范围为-32768——32767,用补码表示;

(4)16位位移由编译程序在编译时算出。

4. 转移的目的地址在指令中的JMP指令

指令“jmp far ptr 标号”实现段间转移,又称为远转移。功能:

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

(IP)=标号在段中的偏移地址。

5. 转移地址在寄存器中的JMP指令

指令格式:jmp 16位寄存器

功能:(IP)=( 16位寄存器)

6. 转移地址在内存中的JMP指令

(1)jmp word ptr 内存单元地址(段内转移)

功能:从内存单元地址开始存放着一个字,是转移的目的偏移地址,内存单元地址可用寻址方式的任一格式给出

如:Jmp word ptr ds:[0]

Jmp word ptr [bx] 等

(2)jmp dword ptr 内存单元地址(段间转移)

功能:从内存单元地址开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。

(CS)=(内存单元地址+2)

(IP)=(内存单元地址)内存单元地址可用寻址方式的任一格式给出。

如:mov ax,0123h

Mov [bx],ax

Mov word ptr [bx+2],0

Jmp dword ptr [bx]

执行后,(CS)=0,(IP)=0123H,CS:IP指向0000:0123。

6. jcxz指令有条件转移指令。

所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都是:-128——127.

Jcxz 标号(如果(cx)=0,转移到标号处执行。)

操作:当(cx=0)时,(IP)=(IP)+8位位移:

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

相当于:if((cx)==0)jmp short 标号;

7. loop指令循环指令

所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP 的修改范围都是:-128——127.

指令格式:loop 标号((cx)=(cx)-1,如果(cx)≠0,转移到标号处执行。)

操作:1.(cx)=(cx)-1;

2. 如果(cx)≠0,(IP)=(IP)+8位位移。

如果(cx)=0,什么也不做(程序向下执行)

相当于:(cx)- -;

If((cx) ≠0)jmp short 标号;

第十章CALL和ret指令

1. ret指令用栈中的数据,修改IP的内容,从而实现近转移

CPU执行ret指令时,1.(IP)=((SS)*16+(SP))

2. (SP)=(SP)+2

相当于:POP IP

Retf指令用栈中的数据,修改CS和IP 的内容,实现远转移CPU执行retf指令时,进行下面四步操作:

1. (IP)=((SS)*16+(SP))

2. (SP)=(SP)+2

3. (CS)=((SS)*16+(SP))

4. (SP)=(SP)+2

相当于:POP IP

POP CS

2. CPU 执行CALL指令时,进行两步操作:

1.将当前的IP或CS和IP压入栈中;

2.转移

CALL 指令不能实现短转移,除此之外,和JMP指令原理相同。

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

1. (SP)=(SP)-2 ((SS)*16+(SP))=(IP)

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

相当于: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 标号

$. Call 16位寄存器,

功能:1. (SP)=(SP)-2

((SS)*16+(SP))=(IP)

(IP)=(16位寄存器)

相当于:PUSH IP

Jmp 16位寄存器

$. call word ptr 内存单元地址

相当于:push IP

Jmp word ptr 内存单元地址$. call dword ptr 内存单元地址

相当于:push CS

push IP

Jmp dword ptr 内存单元地址3. call 和ret配合使用实现子程序的机制

框架如下:

Assume cs:code

Code segment

Main: :

:

Call sub1

:

Sub1: :

Call sub2

:

Ret

Sub2:

:

Ret

Code ends

End main

4. mul 乘法指令;

(1).两个相乘的数,要么都是8位,要么都是16位;如果是8位,一个默认放在AH中,另一个放在8位寄存器或内存字节单元中;如果是16位,一个默认在AX中,另一个放在16位寄存器或内存字单元中。

(2).8位乘法,结果默认放在AX中;16位乘法,结果高位默认在DX中存放,低位在AX中存放。

5. 避免寄存器冲突的:

在子程序的开始将子程序中所有用到的寄存器中的内容都保存起来,在子程序返回前再恢复。

标准框架:

子程序开始:子程序中使用的寄存器入栈

子程序内容

子程序中使用的寄存器出栈

返回(ret,retf)

第十一章标志寄存器

1. 标志寄存器flag作用:

(1)用来存储相关指令的某些执行结果

(2)用来为CPU执行相关指令提供行为依据

(3)用来控制CPU的相关工作方式

8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW),flag是按位起作用的,每一位都有专门的含义,记录特定的信息。

Flag的1,3,5,12,13,14,15在8086CPU中每一使用,不具有任何含义。

2. 第6位ZF,零标志位。它记录相关指令执行后,其结果是否为0。如果结果为0,那么ZF=1,不为0,那么ZF=0.影响标志寄存器的指令,如:add,sub,div,inc,mul,or,and等,他们大都是运算指令;有的指令对标志寄存器没有影响,比如:mov,push,pop等,他们大都是传送指令。

3. 第2位PF,奇偶标志位。它记录相关指令执行后,其结果的所有二进制中1的个数是否为偶数。如果1的个数为偶数,PF=1,如果为奇数,那么PF=0.

4. 第7位SF,符号标志位。它记录相关指令执行后,其结果(实际结果(寄存器中存放的结果)并非逻辑结果)是否为负。如果结果为负,SF=1,如果非负,SF=0。CPU在执行ADD等指令的时候,包含了两种含义。将得到用同一种信息记录的两种结果,关键在于我们的程序需要哪一种结果。SF标志就是CPU对有符号数运算结果的一种记录,它记录数据的正负。在我们将数据当作有符号数来运算的时候,可以通过它来得知结果的正负。如果我们将数据当作无符号数来运算,SF的值则没有意义,虽然相关的指令影响了它的值。

5. 第0位CF,进位标志位。一般情况下,在进行无符号数运算的时候,它记录了运算结果的最高位向更高位的进位值,或从更高位的借位值。

6. 第11位OF,溢出标志位。一般情况下,OF记录了有符号数运算的结果是否发生了溢出。如果发生溢出,OF=1,如果没有,OF=0。CF 是对无符号数运算有意义的标志位,而OF是对有符号数运算有意义的标志位。

7. adc带进位加法指令,它利用了CF位上记录的进位值。

指令格式:adc 操作对象1,操作对象2

功能:操作对象1=操作对象1+操作对象2+CF

加法:1低位相加;2高位相加再加上低位相加产生的进位值

下面指令和add ax,bx具有相同的结果

Add al,al

Adc ah,ah

8. sbb 带借位减法指令,它利用了CF位上记录的借位值。

格式:sbb 操作对象1,操作对象2

功能:操作对象1=程序对象1-程序对象2-CF

Sbb ax,bx实现的功能:(ax)=(ax)-(bx)-CF

9. cmp 比较指令,cmp的功能相当于减法指令,只是不保存结果。Cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

格式:cmp 操作对象1,操作对象2

功能:计算操作对象1-操作对象2 但并不保存结果,仅仅根据计算结果对标志寄存器进行设置。

cmp ax,bx ;无符号数的比较

如果(ax)=(bx)则(ax)-(bx)=0,所以:ZF=1;

如果(ax)≠(bx)则(ax)-(bx)≠0,所以:ZF=0;

如果(ax)<(bx)则(ax)-(bx)将产生借位,所以:CF=1;

如果(ax)≥(bx)则(ax)-(bx)不必借位,所以:CF=0;

如果(ax)>(bx)则(ax)-(bx)既不借位,结果又不为0,所以:CF=0并且ZF=0

如果(ax)≤(bx)则(ax)-(bx)既可能借位,结果可能为0,所以:CF=1或ZF=1。

有符号数的比较:SF只能记录实际结果的正负,发生溢出的时候,实际结果的正负不能说明逻辑上真正结果的正负。但是逻辑上的结果的正负,才是cmp指令所求的真正结果,所以我们在考察SF的同时考察OF,就可以得知逻辑上真正结果的正负,同时就知道比较的结果。

1. 如果SF=1,而OF=0

没有溢出,逻辑结果的正负=实际结果的正负

SF=1,实际结果为负,(ax)<(bx)

2. 如果SF=1, 而OF=1

OF=1,说明有溢出,逻辑上真正结果的正负≠实际正负

SF=1,实际结果为负,如果因为溢出导致了实际结果为负,则逻辑上真正的结果必然为正。

这样SF=1, OF=1,说明了(ax)>(bx)。

3. 如果SF=0,而OF=1 说明:(ax)<(bx)

OF=1,说明有溢出,逻辑结果的正负≠实际结果的正负

SF=0,实际结果非负,有溢出结果非0,所以实际结果为正,如果因为溢出导致了实际结果为正,则逻辑上真正的结果必然为负。

4. 如果SF=0,而OF=0

没有溢出,且结果非负,所以(ax)≥(bx)

10. 检测比较结果的条件转移指令

“转移”指的是它能够修改IP,而“条件”指的是它可以根据某种条件,决定是否修改IP。这些条件转移指令通常都和CMP相配合使用,就好像call和ret指令通常相配合使用一样。

常用的根据无符号数的比较结果进行转移的条件转移指令有:

指令含义检测位

Je 等于则转移ZF=1

Jne 不等于则转移ZF=0

Jb 低于则转移CF=1

Jnb 不低于则转移CF=0

Ja 高于则转移CF=0且ZF=0

Jna 不高于则转移CF=1或ZF=1

E :equal b: below a: above n: not j: jump

11. flag 的第10位是DF,方向标志位。在串处理指令中,控制每次操作后si,di 的增减。

DF=0 每次操作后si,di 递增

DF=1 每次操作后si,di 递减

Movsb 描述:mov es:[di],byte ptr ds:[si];(8086不支持这样的格式。)

如果DF=0; inc si inc di

如果DF=1;dec si dec di

功能:将ds:si指向的内存单元的字节送入es:di中,然后根据标志寄存器DF位的值,将si和di递增或递减。

Movsw 将ds:si指向的内存单元的字送入es:di中,然后根据标志寄存器DF位的值,将si和di递增2或递减2。

一般,movsb 和movsw都和rep配合使用,

格式:rep movsb

汇编描述:s: movsb

Loop s

可见,rep的作用是根据cx的值,重复执行后面的串传送指令。

8086对DF的设置:cld置0,std置1

12. pushf 将标志寄存器的值压栈,popf从栈中弹出数据,送入标志寄存器中。

第十二章内中断

1. 任何一个通用的CPU,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种特殊的信息,我们称其为,中断信息。

2. 四种内中断:除法错误

单步执行

执行int0指令

执行int指令

中断信息中包含中断类型码,中断类型码为一个字节型数据,可以表示256种中断信息的来源,即中断源。

3. 中断向量表,中断处理程序的入口地址列表。

中断向量表在内存中保存,其中存放着256个中断源所对应的中断处理程序的入口。

中断向量表指定存放在内存地址0处,从0000:0000到0000:03E8的1000个段媛中存放着中断向量表。

一个表项存放着一个中断向量,也就是一个中断处理程序的入口地址,对于8086CPU,这个入口地址包括段地址和偏移地址,所以一个表项占两个字,高地址字存放段地址,低地址字存放偏移地址。

4. 8086CPU在收到中断信息后,引发的中断过程为:

1. (从中断信息中)取得中断类型码;N

2. 标志寄存器的值入栈;pushf

3. 设置标志寄存器的第八位TF和第九位IF的值为0; TF=0,IF=0

4. CS的内容入栈; push CS

5. IP的内容入栈; push IP

6. 从内存地址为:中断类型码*4和中断类型码*4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS。(IP)=(N*4),(CS)=(N*4+2)

在最后一步完成后,CPU开始执行程序员编写的中断处理程序。

5. CPU随时都可能执行中断处理程序,所以中断处理程序必须一直存储在内存某段空间之中。

中断处理程序的编写步骤:

1. 保存用到的寄存器

2. 处理中断

3. 恢复用到的寄存器

4. 用iret指令返回

Iret指令的功能用汇编语法描述为:

Pop IP

Pop CS

Popf

Iret指令执行后,CPU回到执行中断处理程序前的执行点继续执行程序。

6. CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程。单步中断的中断类型码为1,则它引发的中断过程为:[1]取得中断类型码1;

[2]标志寄存器入栈,TF,IF设置为0;

[3]CS,IP入栈;

[4](IP)=(1*4),(CS)=(1*4+2)。

Debug提供了单步中断的中断处理程序,功能为显示所有寄存器中的内容后等待输入命令。

7. 响应中断的特殊情况:在执行完向SS寄存器传送数据的指令后,即便是发生中断,CPU 也不会响应。因为,SS:SP联合指向栈顶,而对他们的设置应该连续完成,如果在执行完设置SS的指令后,CPU响应中断,引发中断过程,要在栈中压入标志寄存器、CS和IP的值,而SS改变,SP并未改变,SS:SP指向的不是正确的栈顶,将引起错误。所以CPU在执行完设置SS的指令后,不响应中断。这给连续设置SS和SP,指向正确的栈顶提供了一个时机。

因此我们将设置SS和SP 的指令连续存放,使得设置SP的质量紧接着设置SS的指令执行,而在此之前,CPU不会引发中断过程。

第十三章INT 指令

1. int 指令格式:int n n为中断类型码,它的功能是引发中断过程

CPU执行INT N指令,相当于引发一个N号中断的中断过程:

汇编语言 第二版 王爽 完整答案

第1章基础知识 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。 (2)1KB的存储器有1024个存储单元。存储单元的编号从0到1023。 (3)1KB的存储器可以存储1024*8个bit,1024个Byte。 (4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。(n^m的意思是n的m次幂) (5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。 (7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。 (8)在存储器中,数据和程序以二进制形式存放。 第2章寄存器答案 检测点2.1 (1) 写出每条汇编指令执行后相关寄存器中的值。 mov ax,62627 AX=F4A3H mov ah,31H AX=31A3H mov al,23H AX=3123H add ax,ax AX=6246H mov bx,826CH BX=826CH mov cx,ax CX=6246H mov ax,bx AX=826CH add ax,bx AX=04D8H mov al,bh AX=0482H mov ah,bl AX=6C82H add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H (2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 解: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点2.2 (1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。 (2) 有一数据存放在内存 20000H 单元中,先给定段地址为SA,若想用偏移地址寻到此单元。

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著) 《计算机操作系统原理》 《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。 《数据结构和算法》——这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时) 《软件工程》——这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华) 《Windows 程序设计》——《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本 建议:你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书 关于编程的网站 计算机编程 郭新明-FTP服务器体验式学习课程(张孝祥监制) https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=3997 https://www.doczj.com/doc/c217702357.html,快速开发新闻系统在线播放 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=4708 数字电路基础[宁波电大] https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=774 计算机组成与汇编语言程序设计(赵丽梅)宁波电大 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=1242 操作系统(陈访荣)宁波电大(在线播放) https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=4708 计算机网络(马敏飞)宁波电大 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=1243 https://www.doczj.com/doc/c217702357.html, 2.0快速入门(12)-https://www.doczj.com/doc/c217702357.html, 2.0网站快速导航 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=2501 Internet和Intranet应用(薛昭旺)宁波电大 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=1245 2004年电脑硬件安装调试维修视频教学讲授 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=4825 https://www.doczj.com/doc/c217702357.html, 高级排错技巧 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=768 SQL Server 2000管理专家系列课程 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=4832 开心三人行系列(2):使用Atlas 构建AJAX应用 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=2564 Visual Basic 2005开发技巧系列课程(4): 在Visual Basic 2005中使用.NET Framework 2.0新增功能 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=2526 SQL Server 2005 系列课程-使用ADO https://www.doczj.com/doc/c217702357.html,开发SQL Server 2005 OLAP应用 https://www.doczj.com/doc/c217702357.html,/so/so138.aspx?id=2535

王爽《汇编语言》第1章DOC版

第1章基础知识 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程。在本章中,对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一个好的基础上进行。当课程进行到需要补充新的基础知识(关于编程结构或其他的)时候,再对相关的基础知识进行介绍和探讨。本书的原则是,以后用到的知识,以后再说。 在汇编课程中不对硬件系统进行全面和深入的研究,因为这不在本课程的范围之内。关于PC机及CPU物理结构和编程结构的全面研究,在《微机原理与接口》中进行;对于计算机一般的结构、功能、性能的研究在一门称为《组成原理》的理论层次更高的课程中进行。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活地控制系统进行工作。 1.1 机器语言 说到汇编语言的产生,首先要讲一下机器语言。机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。 上面所说的计算机指的是可以执行机器指令,进行运算的机器。这是早期计算机的概念。现在,在常用的PC机中,有一个芯片来完成上面所说的计算机的功能。这个芯片就是我们常说的CPU(Central Processing Unit,中央处理单元),CPU是一种微处理器。以后我们提到的计算机是指由CPU和其他受CPU直接或间接控制的芯片、器件、设备组成的计算机系统,比如我们最常见的PC机。 每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自已的机器指令集,也就是机器语言。 早期的程序设计均使用机器语言。程序员们将用0、1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。 应用8086CPU完成运算s=768+12288-1280,机器码如下: 101100000000000000000011 000001010000000000110000 001011010000000000000101 假如将程序错写成以下这样,请读者找出错误。 101100000000000000000011 000001010000000000110000 000101101000000000000101

汇编语言课程设计报告-打字练习程序

提供全套毕业设计,欢迎咨询 汇编语言课程设计报告 程序题目:打字练习程序 学生姓名:XX 班级:2010级计算机科学与技术专业4班学号:XXX 院系:计算机科学学院 指导教师:XXX

目录

1设计目的 本程序运行后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘E’退出。通过课程设计,主要达到以下目的: 1. 增进对汇编语言的认识,加强用汇编语言编程的能力; 2. 掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等; 3. 了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础; 4. 通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用自己的程序中; 5. 掌握屏幕输出显示的设计方法。 2概要设计 2.1 系统总体分析 根据题目要求可以看到有以下几部分来实现打字练习:1.由26字母乱序组成一行显示行。2.字母自动落下。3.从键盘输入的字母与落下字母相同则该字母消失,并且下一个字母自动接着落下。4.按下“Ese”键则程序返回到主界面。5.按空格键游戏暂停。6.在主界面按“E”则程序退出。打字练习的主要功能由以上六部分组成,每一部分之间的联系都是比较紧密的。对于以上及部分,最主要的部分就是第二三两个部分,这是打字练习的重点,需要详细设计其所需要的功能。 2.2主模块框图及说明

是 否 否 是 是 图2-1程序设计流程图 程序的核心模块是打字,各个模块功能的实现主要是通过键盘输入指令来融合的,主要流程是先到主界面,然后选择你想要进行的指令ENTER 进入打字界面开始打字,E退出程序,空格在打字练习时执行暂停的功能,ESC是从打字界面返回到主界面。核心模块的流程大体如下面的流程图图2-1: 3 详细设计 3.1 主模块及子模块说明 主界面是程序的初始入口,也是其他功能模块的接入点。主模块是打字模块,也是核心模块,主要通过各个键盘符来控制各个子模块之间的协调。子模块分为判断输入字符判断模块(这当中包含两个小的子模块:主界面输入字符判断和打字模块输入字符判断)、暂停模块、退出模块(这当中包含两个小的子模块:打字界面返回主界面模块和主界面退出程序模块)

汇编语言-王爽-完美高清版视频教程

汇编语言》-王爽-完美高清版-零基础汇编语言入门书籍PDF格式 同时按ctrl+要下载的地址既可下载对应的视频 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f61cb107c8 001第一章- 基础知识01 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6806f45b8 002第一章- 基础知识02 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6ec42d4d3 003第一章- 基础知识03 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6deb05ec4 004第一章-基础知识04 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6e51f6838 005第一章- 基础知识05 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f66edaf8d3 006第二章- 寄存器(CPU工作原理)01 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6d07e07b9 007第二章- 寄存器(CPU工作原理)02 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6d7f585a8 008第二章- 寄存器(CPU工作原理)03 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f639d8b3cf 009第二章- 寄存器(CPU工作原理)04 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6dcadbde6 010第二章- 寄存器(CPU工作原理)05 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6ea3f01c1 011第二章- 寄存器(CPU工作原理)06 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f65b96a06f 012第二章- 寄存器(CPU工作原理)07 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f682da085a 013第三章- 寄存器(内存访问)01 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6486e698 014第三章- 寄存器(内存访问)02 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6b7491d9f 015第三章- 寄存器(内存访问)03 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f622b7f9a7 016第三章- 寄存器(内存访问)04 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f64e2424b9 017第三章- 寄存器(内存访问)05 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6e5132d4d 018第三章- 寄存器(内存访问)06 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f655c10e86 019第三章- 寄存器(内存访问)07 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6b22e64e6 020第四章- 第一个程序01 下载地址:https://www.doczj.com/doc/c217702357.html,/file/f6812126a4

清华大学学习视频教程下载,有需要的千万别错过

da清华大学(英文名:Tsinghua University),地处北京西北郊繁盛的园林区,是在几处清代皇家园林的遗址上发展而成的。清华大学的前身是清华学堂,始建于1911年,曾是由美国退还的部分庚子赔款建立的留美预备学校。1912年,清华学堂更名为清华学校。1925年设立大学部,开始招收四年制大学生。1928年更名为国立清华大学,并于1929年秋开办研究院。清华大学的初期发展,虽然渗透着西方文化的影响,但学校十分重视研究中华民族的优秀文化瑰宝。 清华大学《运筹学》共40讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-232-1-1.html 清华大学《C++语言程序设计》周登文 48讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-371-1-1.html 清华大学《数据结构》(c语言)严蔚敏48讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-1547-1-1.html 清华大学《计算机文化基础》视频教学共28讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-233-1-1.html 清华大学《计算机原理》王诚 64讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-328-1-1.html 清华大学《模式识别》林学訚 32讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-375-1-1.html 清华大学《计算机网络体系结构》汤志忠 48讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-374-1-1.html 清华大学《汇编语言程序设计》温冬婵 64讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-356-1-1.html 清华大学《JA V A编程语言》许斌32讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-354-1-1.html 清华大学《人工智能原理》朱晓燕48讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-329-1-1.html 清华大学《编译原理》张素琴吕映芝64讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-330-1-1.html 清华大学《软件工程》刘强48讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-327-1-1.html 思想道德修养清华大学 https://www.doczj.com/doc/c217702357.html,/thread-327-1-1.html 清华大学《C++语言程序设计》周登文48讲学习梦想家园 https://www.doczj.com/doc/c217702357.html,/thread-2-1-2.html 清华大学《模拟电子技术》华成英56讲学习梦想家园

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

汇编语言王爽第二版课后答案

第一章基础知识 检测点1.1(第8页) ---------------------- (1) 13 (2) 1024,0,1023 (3) 8192,1024 (4) 2^30,2^20,2^10 (5) 64,1,16,4 (6) 1,1,2,2,4 (7) 512,256 (8) 二进制 注意: 1.第4题中的符号'^'指求幂运算(如: 2^30指2的30次方) 第二章寄存器(CPU工作原理) 检测点2.1(第18页) ---------------------- (1)写出每条汇编指令执行后相关寄存器中的值。第一空:F4A3H 第二空:31A3H 第三空:3123H 第四空:6246H 第五空:826CH 第六空:6246H 第七空:826CH 第八空:04D8H 第九空:0482H 第十空:6C82H 第十一空:D882H 第十二空:D888H 第十三空:D810H 第十四空:6246H (2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 解答如下: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点2.2(第23页) ---------------------- (1)00010H,1000FH (2)1001H,2000H 第2题说明: 因为段的起始地址要为16的倍数。所以当段地址小于1001H或大于2000H时CPU都无法寻到。 检测点2.3(第33页) ----------------------答:CPU修改了4次IP的值。 情况如下: 第1次:执行完mov ax,bx后 第2次:执行完sub ax,ax后 第3次:读入jmp ax后 第4次:执行完jmp ax后 最后IP的值为0 实验1 查看CPU和内存,用机器指令和汇编指令编程(第33页) ----------------------------------------------------- 1.预备知识:Debug的使用 <此部分略> 2.实验任务(第43页) (1) <此部分略> (2) <此部分略> (3) 通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。此生产日期不能被改变,因为其具有‘只读’属性。 (4) 通过向内存中的显存写入数据,使计算机根据写入的数据进行ASCII转换,并将转换后且可打印的字符输出到屏幕上。<注:关于显存的详细讨论不在此题范围> 第三章寄存器(内存访问) 检测点3.1(第52页) ---------------------- (1)(题目:略) 第一空:2662H 第二空:E626H 第三空:E626H 第四空:2662H 第五空:D6E6H 第六空:FD48H 第七空:2C14H 第八空:0000H 第九空:00E6H 第十空:0000H 第十一空:0026H 第十二空:000CH 提示:此题可在DEBUG中利用E命令在本机上按照题目中所给出的内存单元及其数据进行相应地修改,然后再用A命令进行写入(题目中所给出的)相应的汇编指令,最后再进行T命令进行逐步执行,以查看相应结果。

各种免费视频教程,为成功下基础

人文类 大学语文视频教程免费观看50课时 https://www.doczj.com/doc/c217702357.html,/20091022_462/ 社会学概论视频教程免费在线观看30课时 https://www.doczj.com/doc/c217702357.html,/20091022_474/ 社会心理学视频教程免费在线观看32课时 https://www.doczj.com/doc/c217702357.html,/20091022_475/ 比较文学概论视频教程在线观看22课时 https://www.doczj.com/doc/c217702357.html,/20091022_477/ 哲学视频教程在线观看16课时 https://www.doczj.com/doc/c217702357.html,/20091022_478/ 中国传统文化概论视频教程在线观看10课时https://www.doczj.com/doc/c217702357.html,/20091022_479/ 中国古代文学视频教程在线观看10课时 https://www.doczj.com/doc/c217702357.html,/20091022_480/ 中国通史(上)视频教程在线观看10课时 https://www.doczj.com/doc/c217702357.html,/20091022_481/ 中国通史(下)视频教程在线观看10课时 https://www.doczj.com/doc/c217702357.html,/20091022_482/ 中外基础教育改革与发展视频教程在线观看20课时https://www.doczj.com/doc/c217702357.html,/20091022_483/ 人类与自然视频教程在线观看12课时 https://www.doczj.com/doc/c217702357.html,/20091022_484/ 科学发展简史视频教程在线观看13课时 https://www.doczj.com/doc/c217702357.html,/20091022_493/ 素描视频教程在线观看10课时 https://www.doczj.com/doc/c217702357.html,/20091022_494/ 汉语修辞学视频教程在线观看6课时 https://www.doczj.com/doc/c217702357.html,/20091022_498/ 逻辑与方法论视频教程在线观看16课时

汇编语言(第2版)王爽著 课后实验报告详解

汇编语言实验报告 : 班级学号 学生姓名 提交日期 成 绩

实验1-1如下: 用E命令将指令写入内存:

用A命令将指令写入内存: 实验1-2代码如下: 用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。如图:

实验1-3: 用D 命令输入内存fff0h~fffffh,则可看到:

生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有: 在window7下虚拟的dos中可以改,但如果重新打开dos中的debug 则日期任然不会改变,因为那是ROM。 实验1-4代码如下:

内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII 码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节 实验2-1:(按实验结果填空) Mov ax,ffff Mov ds,ax Mov ax,2200 Mov ss,ax Mov sp,0100 Mov ax,[0] ;ax=5BEA Add ax,[2] ;ax=5CCA Mov bx,[4] ;bx=30F0 Add bx,[6] ;bx=6026 Push ax ;sp=00FE; 修改的内存单元的地址是2200:00FE 内容是5CCA Push bx ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是6026 Pop ax ;sp=00FE; ax=6026. Pop bx ;sp=0100; bx=.5CCA Push [4] ;sp=00FE; 修改的内存单元的地址是2200:00FE内容是30F0 Push [6] ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是2F36 实验截图如下:

汇编语言课后习题答案 王爽主编

补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。 assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s: mov ch,0 mov cl,[bx] jcxz ok ;当cx=0时,CS:IP指向OK inc bx jmp short s ok: mov dx,bx mov ax ,4c00h int 21h code ends end start 检测点9.3 补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。 assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s:mov cl,[bx] mov ch,0 inc cx inc bx loop s ok:dec bx mov dx,bx mov ax,4c00h int 21h code ends end start 书P101,执行loop s时,首先要将(cx)减1。 “loop 标号”相当于 dec cx if((cx)≠0) jmp short 标号 检测点10.1 补全程序,实现从内存1000:0000处开始执行指令。 assume cs:code stack segment db 16 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax, 1000h

DSP28335汇编教程

DSP28335汇编教程 当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。汇编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种操作。在本章节当中将主要以基于C28x的DSP芯片为例,为读者讲解DSP的寻址方式和汇编指令系统,其中大部分内容也可适用于其他Ti公司的DSP产品。 6.1汇编语言指令集概述 在学习C28x系列DSP的寻址方式和汇编指令指令之前,先来对一些基础的知识进行讲解一下先,在汇编程序当中开发人员会常常使用到许多的特殊符号和标志,它们都具有特殊的含义,在学习汇编之前读者们必须先理解这些符号和标志含义,在这里会对其中最常用最重要的操作数符号和寄存器经行详细说明。 在进行汇编讲解之前先来了解一下开发的核心——CPU。在TMS320C2000系列中,CPU 内核为: C20x/C24x/C240x:C2xLP: C27x/C28x:C27x、C28x 这些CPU的硬件结构有一定差别,指令集也不相同,但是,在C28x芯片中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具有最佳兼容性。可通过状寄存器STl的位OBJMODE和位AMODE的组合,选定模式。 C28x芯片具有3种操作模式: 1.C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址方式和指令系统, 因此,一般应使C28x芯片工作于该种模式。 2.C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标-兼容模式。在该模式 下,目标码与C27xCPU完全兼容,且它的循环—计数也与C27xCPU兼容。 3.C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这些源代码是用C28x 代码生成工具编译生成的。 在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。 本节假设条件为芯片工作于C28x模式(OBJMODE=1,AMODE=0)。复位后,通过执行指令C28OBJ或者SETC OBJMODE将ST1中的OBJMODE位置1,芯片即可工作于C28x模式。 6.1.1 DSP中的操作数 汇编语言离不开操作符和操作数,操作符可以认为就是CPU的指令或者编译器上的伪指令,操作数是指令执行过程中的参与者,也可以说操作数就是指令所控制的对象。 如表6-1,表6-2和表6-3对指令中常用到的一些操作数符号进行说明

80X86汇编语言程序设计教程(杨季文)课后习题答案

第二章答案 题2.1 8086/8088通用寄存器的通用性表现在何处?8个通用寄存器各自有何专门用途?哪些寄存器可作为存储器寻址方式的指针寄存器? 答:8086/8088通用寄存器的通用性表现在: 这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果; 8个通用寄存器的专门用途如下: AX 字乘法,字除法,字I/O BX 存储器指针 CX 串操作或循环控制中的计数器 DX 字乘法,字除法,间接I/O SI 存储器指针(串操作中的源指针) DI 存储器指针(串操作中的目的指针) BP 存储器指针(存取堆栈的指针) SP 堆栈指针 其中BX,SI,DI,BP可作为存储器寻址方式的指针寄存器 题2.2 从程序员的角度看,8086/8088有多少个可访问的16位寄存器?有多少个可访问的8位寄存器? 答:从程序员的角度看,8086/8088有14个可访问的16位寄存器;有8个可访问的8位寄存器; 题2.3 寄存器AX与寄存器AH和AL的关系如何?请写出如下程序片段中每条指令执行后寄存器 AX的内容: MOV AX,1234H MOV AL,98H MOV AH,76H ADD AL,81H SUB AL,35H ADD AL,AH ADC AH,AL ADD AX,0D2H SUB AX,0FFH

答: MOV AX,1234H AX=1234H MOV AL,98H AX=1298H MOV AH,76H AX=7698H ADD AL,81H AX=7619H SUB AL,35H AX=76E4H ADD AL,AH AX=765AH ADC AH,AL AX=D15AH ADD AX,0D2H AX=D22CH SUB AX,0FFH AX=D12DH 题2.4 8086/8088标志寄存器中定义了哪些标志?这些标志可分为哪两类?如何改变这些标志的状态? 答: 8086/8088标志寄存器中定义了9个标志,如下: CF: Carry Flag ZF: Zero Flag SF: Sign Flag OF: Overflow Flag PF: Parity Flag AF: Auxiliary Carry Flag DF: Direction Flag IF: Interrupt-enable Flag TF: Trap Flag 这些标志可分为两类,分别为: 1、运算结果标志; 2、状态控制标志; 采用指令SAHF可把AH中的指定位送至标志寄存器低8位SF、ZF、AF、PF、CF; 采用CLC可清除CF,置CF到0 采用STC可置CF到1 采用CLD可置DF到0 采用sTD可置DF到1 采用CLI可置IF到0 采用STI可置IF到1 另外,在某些指令执行过程中会改变部分标志的状态; 题2.5 请说说标志CF和标志OF的差异。

《汇编语言》学习笔记(清华大学 王爽)

清华大学《汇编语言》(王爽)读书笔记 第一章基础知识 ◎汇编语言由3类指令组成 汇编指令:机器码的助记符,有对应机器码。 伪指令:没有对应机器码,由编译器执行,计算机并不执行 其他符号:如+-*/,由编译器识别,没有对应机器码 ◎一个CPU有n根地址线,则可以所这个CPU的地址线宽度为n,这样的CPU最多可以寻找2的n 次方个内存单元。 ◎ 1K=2^10B 1M=2^20B 1G=2^30B ◎8086 CPU地址总线宽度为20,寻址范围为00000~FFFFF 00000~9FFFF 主存储器地址空间(RAM) A0000~BFFFF 显存地址空间 C0000~FFFFF 各类ROM地址空间 第二章寄存器(CPU工作原理) ◎16位结构描述了一个CPU具有下面几个方面的结构特性 运算器一次最多可以处理16位的数据 寄存器的最大宽度为16位 寄存器和运算器之间的通路为16位 ◎8086有20位地址总线,可以传送20位地址,达到1M的寻址能力。采用在内部用两个16位地址合成的方法来形成一个20位的物理地址 ◎物理地址 = 段地址 × 16 + 偏移地址 ◎在编程是可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。段地址×16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB ◎8086有四个段寄存器 CS、DS、SS、ES ◎CS为代码段寄存器,IP为指令指针寄存器。任意时刻,设CS中内容为M、IP中内容为N,8086CPU从内存M×16+N读取一条指令执行 ◎不能用mov修改CS、IP,因为8086CPU没有提供这样功能,可用指令JMP 段地址:偏移地址。JMP 2AE3:3 JMP AX 修改IP 第三章寄存器(内存访问) ◎DS数据段寄存器。不能将数据直接送入段寄存器,所以『MOV DS, 1』不正确 ◎字在存储时要两个连续的内存单元,低位在低地址,高位在高地址 ◎[address]表示一个偏移地址为address的内存单元 ◎SS:SP指向栈顶元素 ◎PUSH AX:(1)SP = SP - 2;(2)AX送入SS:SP ◎POP AX:(1)SS:SP送入AX;(2)SP = SP + 2 ◎PUSH/POP 寄存器 PUSH/POP 段寄存器 PUSH/POP 内存单元 第四章第1个程序 ◎可执行文件包含两部分:程序和数据,相关的描述信息 ◎程序加载后, ds中存放这程序所在内存区的段地址,这个内存区的偏移地址为0,策程序所在的内存区的地址为ds:0;这个内存区的前256个字节中存放的是PSP,dos用来和程序进行通信。从256字节处向后的空间存放的是程序。 第五章 [BX]和loop指令 ◎[BX]表示一个内存单元,它的段地址在ds中,偏移地址在bx中。MOV AX,[BX] MOV AL,[BX]

x86汇编语言教程

第○章写在前面 我不想夸大或者贬低汇编语言。但我想说,汇编语言改变了20世纪的历史。与前辈相比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘、坐在显示器面前,甚至使用鼠标、语音识别。我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇编程序来把助记符翻译成机器语言,而我们可以从上千种计算机语言中选择我们喜欢的一种,而汇编,虽然不是一种“常用”的具有“快速原型开发”能力的语言,却也是我们可以选择的语言中的一种。 每种计算机都有自己的汇编语言——没必要指望汇编语言的可移植性,选择汇编,意味着选择性能而不是可移植或便于调试。这份文档中讲述的是x86汇编语言,此后的“汇编语言”一词,如果不明示则表示ia32上的x86汇编语言。 汇编语言是一种易学,却很难精通的语言。回想当年,我从初学汇编到写出第一个可运行的程序,只用了不到4个小时;然而直到今天,我仍然不敢说自己精通它。编写快速、高效、并且能够让处理器“很舒服地执行”的程序是一件很困难的事情,如果利用业余时间学习,通常需要2-3年的时间才能做到。这份教材并不期待能够教给你大量的汇编语言技巧。对于读者来说,x86汇编语言"就在这里"。然而,不要僵化地局限于这份教材讲述的内容,因为它只能告诉你汇编语言是“这样一回事”。学好汇编语言,更多的要靠一个人的创造力于悟性,我可以告诉你我所知道的技巧,但肯定这是不够的。一位对我的编程生涯产生过重要影响的人曾经对我说过这么一句话: 写汇编语言程序不是汇编语言最难的部分,创新才是。 我想,愿意看这份文档的人恐怕不会问我“为什么要学习汇编语言”这样的问题;不过,我还是想说几句:首先,汇编语言非常有用,我个人主张把它作为C语言的先修课程,因为通过学习汇编语言,你可以了解到如何有效地设计数据结构,让计算机处理得更快,并使用更少的存储空间;同时,学习汇编语言可以让你熟悉计算机内部运行机制,并且,有效地提高调试能力。就我个人的经验而言,调试一个非结构化的程序的困难程度,要比调试一个结构化的程序的难度高很多,因为“结构化”是以牺牲运行效率来提高可读性与可调试性,这对于完成一般软件工程的编码阶段是非常必要的。然而,在一些地方,比如,硬件驱动程序、操作系统底层,或者程序中经常需要执行的代码,结构化程序设计的这些优点有时就会被它的低效率所抹煞。另外,如果你想真正地控制自己的程序,只知道源代码级的调试是远远不够的。 浮躁的人喜欢说,用C++写程序足够了,甚至说,他不仅仅掌握C++,而且精通STL、MFC。我不赞成这个观点,掌握上面的那些是每一个编程人员都应该做到的,然而C++只是我们"常用"的一种语言,它不是编程的全部。低层次的开发者喜欢说,嘿,C++是多么的强大,它可以做任何事情——这不是事实。便于维护、调试,这些确实是我们的追求目标,但是,写程序不能仅仅追求这个目标,因为我们最终的目的是满足设计需求,而不是个人非理性的理想。 这份教材适合已经学习过某种结构化程序设计语言的读者。其内容基于我在1995年给别人讲述汇编语言时所写的讲义。当然,如大家所希望的,它包含了最新的处理器所支持的特性,以及相应的内容。我假定读者已经知道了程序设计的一些基本概念,因为没有这些是无法理解汇编语言程序设计的;此外,我希望读者已经有了比较良好的程序设计基础,因为如果你缺乏对于结构化程序设计的认识,编写汇编语言程序很可能很快就破坏了你的结构化编程习惯,大大降低程序的可读性、可维护性,最终让你的程序陷于不得不废弃的代码堆之中。 基本上,这份文档撰写的目标是尽可能地便于自学。不过,它对你也有一些要求,尽管不是很高,但我还是强调一下。 祝您编程愉快! 第一章汇编语言简介 先说一点和实际编程关系不太大的东西。当然,如果你迫切的想看到更实质的内容,完全可以先跳过这一章。 那么,我想可能有一个问题对于初学汇编的人来说非常重要,那就是: 汇编语言到底是什么? 汇编语言是一种最接近计算机核心的编码语言。不同于任何高级语言,汇编语言几乎可以完全和机器语言一一对应。不错,我们可以用机器语言写程序,但现在除了没有汇编程序的那些电脑之外,直接用机器语言写超过1000条以上指令的人大概只能算作那些被我们成为“圣人”的牺牲者一类了。毕竟,记忆一些短小的助记符、由机器去考虑那些琐碎的配位过程和检查错误,比记忆大量的随计算机而改变的十六进制代码、可能弄错而没有任何提示要强的多。熟练的汇编语言编码员甚至可以直接从十六进制代码中读出汇编语言的大致意思。当然,我们有更好的工具——汇编器和反汇编器。 简单地说,汇编语言就是机器语言的一种可以被人读懂的形式,只不过它更容易记忆。至于宏汇编,则是包含了宏支持的汇编语言,这可以让你编程的时候更专注于程序本身,而不是忙于计算和重写代码。

大学视频教程集合

[转] 大量大学视频教程让自学充电的朋友们省去几万块学费2012-3-1 13:09阅读(4)转载自张楚锋 下一篇:各院校录取分数线... |返回日志列表 ?转载 ?分享 ?评论 ?复制地址 ?更多 计算机类全部,医学,心理学,法学类,财经管类,广告类,机械类,土木建筑类,电气类,大学英语,大学物理,高等数学,大学化学,哲学,应有尽有。

斯坦福大学著名学者报告会 法学类 律师实务(48课时) https://www.doczj.com/doc/c217702357.html,/20091022_284/ 法理学(64课时) https://www.doczj.com/doc/c217702357.html,/20091022_302/ 公司法(48课时) https://www.doczj.com/doc/c217702357.html,/20091022_298/ 合同法(48课时) https://www.doczj.com/doc/c217702357.html,/20091022_299/ 劳动法学(48课时) https://www.doczj.com/doc/c217702357.html,/20091022_297/ 证据法(48课时) https://www.doczj.com/doc/c217702357.html,/20091022_296/ 国际技术贸易法(36课时) https://www.doczj.com/doc/c217702357.html,/20091022_309/

学无止尽厚积薄发 医学 金匮要略(25课时) https://www.doczj.com/doc/c217702357.html,/20100401_923/ 中医美容学(40课时) https://www.doczj.com/doc/c217702357.html,/20100331_920/ 推拿治疗学(26课时) https://www.doczj.com/doc/c217702357.html,/20100330_916/ 成人护理学(16课时) https://www.doczj.com/doc/c217702357.html,/20100330_915/ 妇产科(16课时) https://www.doczj.com/doc/c217702357.html,/20100324_892/ 药用植物学(43课时) https://www.doczj.com/doc/c217702357.html,/20100324_889/ 定量生理学(46课时) https://www.doczj.com/doc/c217702357.html,/20100311_657/

相关主题
文本预览
相关文档 最新文档