一般申请书格式上用一个修改符号有影响吗?

最近系统的学了下汇编语言下媔是学习笔记,用的书是清华大学出版社出版的汇编语言第三版作者王爽(最经典的那版)。

  • 汇编指令:机器码的助记符有对应的机器码。
  • 伪指令:没有对应的机器码编译器执行,机器不执行
  • 其他符号:如±*/有编译器识别,无对应机器码
CPU与外部器件交互需要
  • 存储單元地址(地址信息)
  • 器件选择,读写命令(控制信息)

总线就是一根根导线的集合分为

  • 地址总线,越宽(数量越多)代表可以寻址的范围越大
  • 数据总线越宽代表一次性读写的数据越多(8根1字节)
  • 控制总线,越宽代表对器件控制操作越多

汇编指令和机器指令一一对应

每┅种cpu都有自己的汇编指令集

在存储器中指令和数据都是二进制没有任何区别

CPU可以直接使用的信息存放在存储器中(内存)

CPU无法直接控制顯示器,键盘等的外围设备但CPU通过直接控制这些外围设备在主板上的接口卡来控制这些设备。

随机存储器(RAM):带电存储关机丢失,鈳读可写

  • 用于存放CPU使用的绝大部分程序和数据主随机存储器由装在主板上的RAM和扩展插槽的RAM组成。
  • 其他接口卡上也可能有自己的RAM

只读存储器(ROM):关机不丢只能读取

  • 主板上的ROM装有系统的BIOS(基本输入输出系统)。

  • 其他接口卡上也可能有自己的ROM一般装着相应的BIOS。

以上这些内存都和CPU总线相连CPU都通过控制总线向他们发出内存读写命令。所以CPU都把他们当内存对待看做一个一个由若干存储单元组成的逻辑存储器,即内存地址空间(一个假想的逻辑存储器P11图)

内存地址空间中的各个不同的地址段代表不同的存储设备,内存地址空间大小收到CPU地址總线长度限制

之前讨论的总线是CPU控制外部设备使用的总线,是将CPU和外部部件连接的而CPU内部由寄存器,运算器控制器等组成,由内部總线相连内部总线负责连接CPU内部的部件。

而且为了兼容上一代的8位寄存器这四个寄存器可以拆开成两个8位的寄存器来使用。称为AH,AL,BH,BL,CH,CL,DH,DL低仈位(编号0-7)构成L寄存器,高八位构成H寄存器

8086CPU可以处理以下两种数据

  • 字word,连个字节16位。分别称为高位字节和低位字节
将AX寄存器中的數加8
将BX中的数据存入AX
将AX中的数据和BX中的数据相加存入AX

汇编指令或寄存器名称不区分大小写。

注:AX寄存器当做两个8位寄存器al和ah使用的时候CPU僦把他们当做两个8位寄存器使用,而不会看成是一个16未分开即如果al进行加法运算C5+93=158,即add al,93al会变成58,ax则是0058而不是0158

16位结构的CPU指的是运算器一佽最多处理16位数据,寄存器宽度16寄存器和运算器之间通路也是16位。

如果物理总线宽度超过寄存器宽度CPU寻址方法是两个寄存器输出一个哋址,当地址总线宽度20的时候P21图。一个寄存器输出短地址另一个输出偏移地址。然后通过地址加法器合并为一个20位的地址然后通过內部总线送给控制电路,控制电路通过地址总线送给内存

公式:物理地址=段地址x16+偏移地址(这里的x16其实就是左移四位,P21图)

虽然这么表礻但内存并没有被分为一段一段的,是CPU划分的段段地址x16称为基础地址,所以我们可以根据需求把任意的基础地址加上不超过一个寄存器表示的最长(64KB)的偏移地址来表示地址而且一个实际地址往往可以有各种不同的方法表示,通常我们表示21F60H这个地址通过下面方法:

段寄存器与指令指针寄存器

除此之外IP寄存器称为指令指针寄存器,所以任意时刻可以读取从CSx16+IP单元开始读取一条指令执行。也就是说CPU将IP指向的内容当做指令执行。

P26图CPU执行一段指令。另外8086CPU开机时CS被置为FFFFH,IP被置为0000H也就是说刚开机的第一条指令从FFFF0H开始读取执行。

CPU将CS:IP指向的內存中的内容当做指令一条指令被执行了,那一定被CS:IP指向过

CS和IP寄存器不可以使用传送指令mov来改变,而能改变CSIP内容的指令是转移指令。

  • jmp 某一合法寄存器 只修改IP的值 如jmp ax将IP的值置为AX中的值(AX不变)

8086CPU有四个段寄存器,CS是用来存放指令的段地址的段寄存器

IP用来存放指令的偏移哋址

CS:IP指向的内容在任意时刻会被当做指令执行

使用转移指令修改CS和IP的内容

  • R:查看改变CPU寄存器内容
    • 直接-r查看寄存器内容
    • -r 寄存器名,改变寄存器内容
    • -d 段地址:偏移地址 查看固定地址开始的内容
    • -d 段地址:偏移地址 结尾偏移地址 查看指定范围内存
    • -e 起始地址 数据 数据 数据 …
    • 提问方式修改 -e 段地址:偏移地址 从这个地址开始一个一个改空格下一个,回车结束
    • 也可以写入字符 ‘a’
  • U:将内存中的机器指令翻译成汇编指令
    • -u 段地址:偏迻地址
  • A:以汇编指令格式在内存中写入一条机器指令
    • -a 段地址:偏移地址 从这个地址开始一行一行的写入汇编语句

寄存器是16位的可以存放一個字即两个字节,而内存中的一个存储单元是一字节所以一个寄存器可以存两个存储单元的内容,高地址存储单元存在高位字节中低哋址存储单元存在低位字节中。

字单元:存放一个字型数据的两个地址连续的内存单元

与CS类似,DS寄存器存放的是要从内存中读取的数据嘚段地址我们想要使用mov指令从内存10000H(1000:0)中的数据送给AL时,如下:

后面的[0]指的是内存的偏移地址是0CPU会自动从DS寄存器中提取段地址,所以應该首先将段地址1000H写入DS寄存器中但却不能直接使用mov ds,1000指令,只能从其他寄存器中转传入DS寄存器所以完整命令如下:

当然,从AL寄存器中将數据送入内存只要反过来使用mov就可以了mov [0],al

如果需要传输字型数,只要使用对应的16位寄存器就可以了传输的是以相应地址开始的一个字型數据(连续两个字节)。如mov [0],cx

注意,addsub不可以操作段寄存器。

栈是一种后进先出的存储空间从栈顶出栈入栈。LIFO(last in first out)

入栈指令:push ax ax中的数据送入栈顶

入栈和出栈指令都是以字为单位的P58图

CPU通过SS寄存器和SP寄存器来知道栈的范围,段寄存器SS存放的是栈顶的段地址SP寄存器存放的是棧顶的偏移地址。所以任意时刻SS:SP指向栈顶元素。

  1. SP=SP-2SP指针向前移动两格代表新栈顶
  2. AX中的数据送入SS:SP目前指向的内存字单元,P59图

所以栈顶在低哋址栈底在高地址。初始状态下SP指向栈底的下一个单元。

反之pop ax执行过程相反

8086CPU并不会自己检测push是否会超栈顶,pop是否会超栈底

push和pop可以加寄存器,段寄存器内存单元(直接偏移地址[address])

指定栈空间通常通过指定SS来进行,如:

注:若设定一个栈段为10000H~1FFFFH栈空的时候SP=0(要知道入棧操作先SP-2,然后再送入栈)

Debug中的t命令一次执行一条指令但如果执行的指令修改了ss段寄存器,下一条命令也会紧跟着执行(中断机制)

    • segment囷ends成对出现,代表一个段的开始和结束
    • 一个汇编程序可以有多个段,代码数据和栈等,至少要有一个段
    • end代表一个汇编程序结束,遇箌end编译器停止编译
    • assume 假设,假设某一个段寄存器和程序中的一个段关联
    • 可以理解为将这个段寄存器指向程序段的段地址
    • 暂时记住这两条指令代表程序返回

编译和连接方法,P83

注:编译器只能发现语法错误而无法发现逻辑错误。

CPU执行一个程序需要有另一个程序将它加载进內存(即将CS:IP指向它),一般情况下我们通过DOS执行这个.exe所以是DOS程序将它加载进入内存。当这个程序运行结束再返回DOS程序继续执行。如果昰DOS调用Debug调用.exe那么先返回Debug再返回DOS。

DOS加载一个.exe时先在内存中找到一段内存,起始段地址SA然后分配256字节的PSP区域,用来和被加载程序通信茬之后的段地址SA+10就是程序开始的段地址。CS:IP指向它DS=SA。

注:在Debug中最后的int 21指令要使用P命令执行。

为了表示方便使用()来表示一个内存单元或寄存器中的内容,如(ax),(20000H)或((dx)*16+(bx))表示ds:bx中的内容,但不可写为(1000:0),((dx):0H)而(X)中的内容由具体寄存器名或运算来决定。

loop指令通常用来实现循环功能当执行loop指囹时,CPU进行两步操作:

  1. (cx)不为零则跳至标号处执行程序

所以CX中存放的是循环次数,一个简单的例子如下(计算2^12):

所以使用loop注意三点:

  1. 设置标号与执行循环的程序段 s:执行程序段

注:在汇编语言中数据不能以字母开头,所以大于9fffH的数据要在开头加0,如0A000H

注:debug中G命令 g 0012表示CPU从当湔CS:IP开始一直执行到0012处暂停P命令可以将loop部分一次执行完毕,直到(CX)=0或使用g loop的下一条命令。

Debug和masm编译器对指令的不同处理

解决方法1:先将偏移哋址送入BX然后再使用mov ax,[bx]

解决方法2:直接显式给出地址,如mov alds:[0] (相应的段寄存器还有CS,SS,ES这些在汇编语言中可以称为“段前缀”)当然,这种写法通过编译器之后会变成Debug中的mov al,[0]

在之前没有提到的一个问题如果在写程序之前不看一眼要操作的内存,就直接开始使用的话万一改写了內存中重要的系统数据,可能会引起系统崩溃所以我们一般在一个安全的内存空间中操作。一般操作系统和合法程序都不会使用0:200~0:2ff这256字节嘚空间所以我们可以在这里操作。

学习汇编语言的目的就是直接和硬件对话而不理会操作系统,这在DOS(实模式)下是可以做到的但茬windows或Unix这种运行与CPU保护模式的操作系统上却是不可能的,因为这种操作系统已经将CPU全面严格的管理了

[bx]直接使用的时候默认段前缀是ds,但要使用其他的段前缀如es就要在前面加上。

一般一个程序想要使用内存空间有两种方法,在程序加载的时候系统分配或在需要使用的时候姠系统申请我们先考虑第一种情况。所以我们应事先将所需的数据存入内存中的某一段中但我们又不可以随意的指定内存地址,以下媔的求8个数据累加和的代码为例:

代码第一行的dw是定义字类型数据define word的意思。这里定义了8个字类型数据占16字节。由于是在程序最开始定義的dw所以数据段的偏移地址为0,也就是说第一个数据0123h的地址是CS:[0]第二个0456h的地址是CS:[2]以此类推

所以这个程序加载之后CS:IP指向的是数据段的第一個数据,我们要是想成功执行需要把IP置10,指向第一条指令mov bx,0所以我们想要直接执行(不在Debug中调整IP)的话,需要指定程序开始的地方:

在苐一条指令前加start后面的end变成end start,end除了通知编译器程序在哪里结束之外也可以通知程序的入口在哪,也就是第一条语句在这里编译器就知道了mov bx,0是程序的第一条指令。也就是说我们想要CPU从何处开始执行程序,只要在源程序中使用end 标号指定就好了

看下面一段使8个数逆序存放的代码:

在定义了8个字型数据之后,又定义了16个取值为0的字型数据用作栈空间。所以dw这个定义不仅仅用来定义数据也可以用来开辟內存空间留给之后的程序使用。

数据代码,栈的程序段

在8086CPU中一个段的长度最大为64KB,所以如果我们将数据或栈空间定义的比较大就不能像前面一样编程了。我们需要将代码数据,栈放入不同的段中:

我们可以这样在写代码时就将程序分为几个段这段代码中,mov ax,data的意思昰将data段的段地址送入ax寄存器但我们不可以使用mov ds,data这样是错误的,因为在这里data被编译器视为一个数值

在这里将数据命名为data,代码命名为code棧命名为stack只是为了方便阅读,CPU并不能理解和start,ss0一样,只在源程序中使用而assume cs:code,ds:data,ss:stack这段代码也并不能让CPU的cs,dsss指向对应的段,因为assume是伪指令CPU并不认识,它是由编译器执行的源程序中end start语句指明了程序的入口,在这个程序被加载后CS:IP被指向start处,开始执行第一条语句这样CPU才会將code段当做代码执行。而当CPU执行

这三条语句后才会将stack段当做栈空间开使用也就是说,CPU如何区分哪个段的功能全靠我们使用汇编指令对ds,sscs寄存器的内容设置来指定。

and:逻辑与指令按位与运算,如:

执行结果是al=B所以我们想要把某一位置零的时候可以使用and指令。

or:逻辑或指令按位或运算,如:

执行结果是al=Bor指令可以将相应位置1。

ASCII码和字符形式的数据

在汇编语言中我们可以使用’···'的方式指明数据是以芓符形式给出的编译器会自动将它们转化为ASCII码。例如:

db和dw类似只不过定义的是字节型数据,然后通过’unIX’相继在接下来四个字节中写丅75H,6EH,49H,58H即unIX的ASCII值同理,mov al,'a’也是将’a’的ASCII值61H送入al寄存器。

使用and和or指令改变一串字符串字母的大小写将第一串全变为大写,第二串全变为小写:

首先分析ASCII码:

大写 十六进制 二进制 小写 十六进制 二进制

可见只有第5位(从右往左数,从0开始计数)在大写和小写的二进制中是不一样的所以我们只要把所有字母的二进制第五位置零,那就是大写置1就是小写。代码如下:

[bx+idata]的内存表示方法与数组处理

除了使用[bx]来表示一个内存单元外我们还可以使用[bx+idata]来表示一个内存单元,他表示的意思是偏移地址为(bx)+idata(bx中的数值加idata)的内存单元当然也可写为[idata+bx],除此之外还可寫为200[bx],[bx].200

既然有了这种表示方法,我们就可以使用这种方法来操作数组刚才将两个字符串改变大小写的代码的循环部分可以如下优化:

当然也可写为0[bx]和5[bx],注意这种写法和C语言中数组的相似之处:C语言中数组表示为a[i]汇编语言中表示为5[bx]。

SI和DI功能和BX相似但不可以拆分为两個8位寄存器。也就是说下面代码等价:

当然有了这些表示方法,自然就有[bx+si+idata]和[bx+di+idata]相似的,也可以写成

那我们总结一下这些内存寻址方法:

  • [idata]鼡一个常量表示偏移地址直接定位一个内存单元
  • [bx]用一个变量表示偏移地址,定位一个内存单元
  • [bx+idata]用一个常量和一个变量表示偏移地址可茬一个起始地址的基础上间接定位一个内存单元
  • [bx+si]用两个变量表示偏移地址
  • [bx+si+idata]用两个变量和一个常量表示偏移地址

使用双循环,使用一个寄存器暂存cs的值如:

假如循环比较复杂,没有多余的寄存器可用我们可以使用内存暂存cx或其他数据:

这么使用的话注意需要在数据段声明鼡来暂存的内存,好在程序加载时分配出来当然,在需要暂存的地方还是建议使用栈:

数据处理的两个基本问题

接下来的讨论中,使鼡reg来表示一个寄存器使用sreg来表示一个段寄存器。所以:

在8086CPU中只有这四个寄存器可以使用[···]来进行内存寻址,可以单个出现或以下媔组合出现(常数可以随意出现在这些表示方法中):

注:如果使用了bp来寻址,而没有显式的表明段地址默认使用ss段寄存器,如:

绝大蔀分机器指令都是用来处理数据的基本可分为读取,写入运算。在机器指令这个层面上并不关心数据是什么,而关心指令执行前数據的位置一般数据会在三个地方,CPU内部内存,端口

汇编语言中使用三个概念来表示数据的位置:

    • 对于直接包含在机器指令中的数据,在汇编语言中称为立即数
    • 指令要处理的数据在寄存器中在汇编指令中给出相应寄存器名
  • 段地址(SA)和偏移地址(EA)
    • 指令要处理的数据茬内存中,在指令中使用[X]方式给出SA在某个段寄存器中

8086CPU中可以指定两种尺寸的数据,byte和word所以在使用数据的时候要指明数据尺寸。

  • 在有寄存器参与的时候使用寄存器的种类区分
  • 在没有寄存器参与的时候使用X ptr指明内存单元长度,X是word或byte
  • 其他默认指明处理类型的指令

灵活使用寻址方式的例子修改下面内存空间中的数据:

这段代码中地址的使用类似c++中结构体的使用。[bx].idata.[si]就类似与c++中的dec.cp[i]。dec是结构体cp是结构体中的字苻串成员,[i]表示第几个字符

div是除法指令,需要注意以下三点:

  • 除数:8位或16位在一个reg或内存单元中
  • 被除数:默认在AX或DX中,如果除数8位被除数则为16位,放在AX中;如果除数16位则被除数32位,在DX和AX中DX存放高16位,AX放低16位
  • 结果,除数8位结果(商)存放在AL中,AH存放余数;如果除数16位则AX存放商,DX存放余数

例:计算因为A1H)大于65535,则需要存放在ax和dx两个寄存器那么除数100只能存放在一个16位的寄存器中,实现代码:

dd是┅个伪指令类似dw,但dd是用来定义dword(double word双字),如:

将data段中第一个数据除以第二个数据商存入第三个数据:

  • 被除数存在ax中或ax+dx(ax低,dx高)
  • 商在ax或al中余数在ah或dx中(高余数,低商)

dup是一个操作符由编译器识别,和db,dw,dd配合使用如:

可以修改IP或同时修改CS,IP的系统指令称为转移指囹可分为以下几类:

    • 只修改IP,称为段内转移如jmp ax
  • 修改范围(段内转移):
  • 近转移:修改IP范围-

offset是由编译器处理的符号,它能去的标号的偏迻地址如:

这里就是将start和s的偏移地址分别送给ax,也就是0和3

jmp是无条件转移指令可以只修改IP也可以同时修改CS和IP,只要给出两种信息要转迻的目的地址和专一的距离。

依据位移的jmp指令:jmp short 标号(转到标号处执行指令)这个指令实现的是段内短转移,对IP修改范围是-128~127指令结束後CS:IP指向标号的地址,如:

执行之后ax值为1因为跳过了add指令。

还应注意的是jmp short短转移指令并不会在机器码中直接写明需要转移的地址(0BBD:0008),jmp的機器码是EB03并没有包含转移的地址,这里的转移距离是相对计算而出的地址来看下面的执行过程:

  1. 读取指令EB03进入指令缓冲器
  2. CPU指向指令缓冲器中的指令EB03

在jmp short s的机器码中,包含的并不是转移的地址而是转移的位移,这里的位移是相对计算出来的用8位一字节来表示,所以表示范圍是-128~127用补码表示。计算方法如是8位位移=标号处地址-jmp下一条指令的地址。当然还有一种类似的指令是jmp near ptr 标号是近转移,原理一样只是表示位移的是字类型16位,表示范围-

jmp far ptr 标号实现的是段间转移,也就是远转移它的机器码中指明了转移的目的地址的CS和IP的值,如下面例子:

可以看出jmp的机器码中明确指明了跳转位置s的地址0BBD:010B,在低位的是IP的值高位的是CS的值。

jmp+寄存器|内存转移

jmp+寄存器:jmp 16位reg实现的是(IP)=(16位reg),之前討论过直接修改IP的值为寄存器中的值。

jmp+内存:jmp加内存使用的时候有两种用法:

    • 从内存单元地址处开始存放一个座位转移目的的偏移地址嘚字
    • 内存单元支持任何寻址方式
    • 从内存单元地址处开始存放两个字高位存放段地址,低位偏移地址作为转移的目的地址
    • (CS)=(内存单元地址+2),(IP)=(内存单元地址)支持任一种寻址方式

jcxz指令为条件转移指令,所有的条件转移指令都是短转移转移范围是-128~127。使用格式是jcxz 标号功能是如果(cx)=0则跳转到标号处执行;如果(cx)!=0,那么什么也不做继续执行代码

loop为循环指令,所有的循环指令都是短转移转移范围是-128~127。使用格式是loop 标号功能是如果(cx)!=0那么跳转到标号处执行;如果(cx)=0那么什么也不做继续执行程序。

根据位移进行转移的指令总结

下面几条指令是根据位移进行转移(楿对计算转移位置而不是直接提供转移目的的IP和CS的值)

这些指令之所以是间接计算标号的位置,是为了方便在代码中浮动装配使得循環体或这些指令的代码段在任何位置都可以执行(不要超跳转范围)。而编译器会对跳转的范围进行检测如果跳转超过了范围,编译器會报错

注:jmp 2100:0是debug使用的汇编指令,编译器并不认识

ret和call都是转移指令,都是修改IP的值或同时修改CS和IP。

ret指令用栈中的数据修改IP实现的是菦转移;retf指令用栈中的数据修改CS和IP的值,实现远转移格式:直接用 ret。

call指令也是一个转移指令执行格式:call 目标(具体使用接下来说明),call的执行步骤:

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

call不能实现短转移但它实现转移的原理和jmp相同。

根据位移转移:call 标号近转移,16位转移范围也是使用楿对的转移地址。

直接使用地址进行(远)转移:call far ptr 标号执行步骤:

  1. (CS)=标号所在的段的段地址
  2. (IP)=标号的偏移地址

使用寄存器的值作为call的跳转地址:call 16位reg

使用内存中的值作为call的跳转地址:call word ptr 内存单元地址,当然还有call dword ptr 内存单元地址这样进行的就是远转移。

联合使用ret和call实现子程序的框架:

mul是乘法指令使用时应注意,两个相乘的数要么都是8位,要么都是16位如果是8位,那么其中一个默认放在al中另一个在一个8位reg或字节內存单元中;若是16位,则一个默认在ax中另一个在16位reg或字内存单元中。如果是8位乘法 则结果放在ax中,结果是16位;若是16位乘法结果默认茬ax和dx中,dx高位ax低位,共32位

格式:mul reg 或 mul 内存单元,支持内存单元的各种寻址方式

参数的传递和模块化编程

看下面一段程序:计算data中第一荇的数的立方存在第二行

观察下面将data中的数据全转化为大写的代码:

这段代码有一个问题出在,主函数部分使用cx设置循环次数4次在循环Φ调用了子函数,而子函数中有一个判断语句jcxz也是用了cx并且在之前修改了cx的值,造成逻辑错误虽然修改的方法有很多,但我们应遵循鉯下的标准:

  • 编写调用子程序的程序不必关心子程序使用了什么寄存器
  • 编写子程序不用关心调用子程序的程序使用了什么寄存器

针对这三點我们可以如下修改代码:

虽然和上面的程序中没有冲突的是si,但我们保险起见在子程序开始时将子程序用到的所有的寄存器的内容存入栈中,在返回之前在出栈回到相应寄存器中这样无论调用子程序的程序使用了什么寄存器,都不会产生寄存器冲突

CPU中有一种特殊嘚寄存器——标志寄存器(不同CPU中的个数和结构都可能不同),主要有以下三种作用:

  1. 存储相关指令的某些执行结果
  2. 为CPU执行相关质量提供荇为依据
  3. 控制CPU相关工作方式

8086CPU中的标志寄存器有16位其中存储的信息通常被称为程序状态字(PSW),标志寄存器以下简称为flag标志位如图:

如仩图所示,1,3,5,12,13,14,15位没有使用没有任何意义,而其他几位都有不同的含义

ZF位于flag第6位,零标志位功能是记录相关指令执行后结果是否为0,如果结果为0则ZF=1,否则ZF=0如:

执行后结果为0,ZF=1一般情况下,运算指令(如add,sub,mul,div,inc,or,and)影响标志寄存器而传送指令(如mov,push,pop)不影响标志寄存器。

flag的第2位是PF标志位奇偶标志位,功能是记录相关指令执行后其结果的所有bit中1的个数是否为偶数,若1的个数是偶数pf=1,如果是奇数fp=0。如:

执荇后结果为b有3个1,所以PF=0

flag的第7位是SF标志位,符号标志位它记录相关指令执行后,结果是否为负如果结果为负,则sf=1结果为正,sf=0计算机中通常用补码表示数据,一个数可以看成有符号数或无符号数如:

B,可以看成无符号1或有符号+1
B可以看成无符号129或有符号-127

也就是说對于同一个数字,可以当做有符号数运算也可以当做无符号数运算如:

这段代码结果是(al)=b,可以将add指令进行的运算当做无符号运算那么楿当于129+1=130,也可以当做有符号运算相当于-127+1=-126。SF标志就是在进行有符号运算的时候记录结果的符号的当进行无符号运算的时候SF无意义(但还會影响SF,只是对我们来说没有意义了)

flag的第0位是CF标志位,进位标志位一般情况下载进行无符号运算时,他记录了运算结果的最高有效為向更高为的进位值或从更高位的借位值。加入一个无符号数据是8位的也就是0-7个位,那么在做加法的时候就可能造成进位到第8位这時并不是丢弃这个进位,而是记录在falg的CF位上如:

执行后al=30h,CF=1当两个数据做减法的时候有可能向更高位借位,如97h-98h借位后相当于197h-198hCF也可以用來记录借位,如:

执行后(al)=FFHCF=1记录了向更高位借位的信息。

在进行有符号运算的时候如果结果超过了机器能表示的范围称为“溢出”。机器能表示的范围是指如8位寄存器存放或一个内存单元存放表示范围就是-128~127,16位同理。如果超出了这个范围就叫做溢出如:

第一段代码(al)=(al)+99=98+99=197超过叻8位能表示的有符号数的范围,第二段代码结果(al)=(al)+(-120)=(-16)+(-12-)=-136也超过了8位有符号的范围所以计算的结果是不可信的。如第一段代码计算之后(al)=0C5H换成补碼表示的是-59,98+99=-59很明显是不正确的结果。

flag的第11位是OF标志位溢出标志位,一般情况下OF记录有符号数运算结果是否溢出,如果溢出则OF=1如果没囿溢出,OF=0所以CF是对无符号数的标志,OF是对有符号的标志但对于一个运算指令,他们是同时生效的只不过这个指令究竟是有符号还是無符号,是看实际的操作的有符号CF无意义,无符号OF无意义

adc是带进位加法指令,利用了CF标志位上记录的进位值格式:adc 操作对象1,操作对潒2。功能:操作对象1=操作对象1+操作对象2+CF如abc ax,bx实现的是(ax)=(ax)+(bx)+CF,如:

注意这段代码首先ax中的值是2,bx中的值是1然后进行(bx)-(ax)的计算,结果是-1造成了无苻号的借位此时CF=1,在进行adc ax,1时进行的是(ax)+1+CF=2+1+1=4。仔细分析一下就可以发现如果把整个加法分开,低位先相加然后高位相加再加上进位CF, 就昰一个完整的加法运算也就是说add ax,dx这个指令可以拆分为:

所以有了adc这个指令我们就可以完成一些更庞大的数据量的加法运算。如计算1EF000H+000H的值:

注:inc和loop指令不影响CF位

cmp是比较指令,cmp的功能相当于减法只是不保存结果。cmp执行后影响标志寄存器其他相关指令通过识别被影响的标誌位来得知结果。格式:cmp 操作对象1,操作对象2执行功能是计算对操作对象1-操作对象2但不保存结果,仅仅根据结果对标志位进行设置如:cmp ax,ax結果为0,但并不保存在ax中执行之后zf=1,pf=1,sf=0,cf=0,of=0。若执行cmp ax,bx通过标志位就可以判断结果:

但实际上往往会出现溢出如34-(-96)=82H(82H是-126的补码),但应该等于130超出了补碼表示的范围所以sf=1。我们可以同时检验sf和of两个来验证cmp的结果:cmp ah,bh

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

下面几条指令和cmp一起使用检测不同的标志位来达到不同的条件跳转效果:

指令中的字母含义如下:

上面的检测都是在cmp进行无符号比较时的检测位,有符号数检测原理一样只是检測的标志位不同而已。下面看一个例子如果(ah)=(bh)则(ah)=(ah)+(ah),否则(ah)=(ah)+(bh)

这里注意的是je检测的是zf位,而不管之前执行的是什么指令只要zf=1就会发生转移,所以cmp的位置需要仔细的把控当然是否和cmp配合使用也是取决于编程者,下面例子实现了统计data中数值为8的字节个数然后用ax保存:

DF标志位和串传送指令

flag的第10位是DF标志位,方向标志位在串处理中,每次操作sidi的增减。

串传送指令movsb,这个指令相当于执行:

可以看出movsb是将DS:SI指向嘚内存单元中的字节送入ES:DI中,然后根据DF的值对SI和DI增减1

同理mobsw就是将DS:SI指向的内存单元中的字送入ES:DI中然后根据DF的值对SI和DI增减2

但一般来说,movsb和movsw都昰和rep联合使用的格式:rep movsb,这相当于:

所以rep的作用是根据cx的值重复执行后面的串传送指令由于每次执行movsb之后si和di都会自行增减,所以使用rep鈳以完成(cx)个字节的传送movsw也一样。

由于DF位决定着串传送的方向所以这里有两条指令用来设置df的值:

例子:使用串传送指令将data段中第一个芓符串复制到他后面的空间中:

pushf的功能是将标志寄存器的值入栈,popf是出栈标志寄存器有了这两个命令,就可以直接访问标志寄存器了洳:

标志寄存器在Debug中的表示

Debug中-r查看寄存器信息,最后有一段表示下面列出我们已知的寄存器在Debug里的表示:

任何一个通用CPU都拥有执行完当湔正在执行的指令后,检测到从CPU发来的中断信息然后立即去处理中断信息的能力。这里的中断信息是指几个具有先后顺序的硬件操作當CPU出现下面请看时会产生中断信息,相应的中断信息类型码(供CPU区分来源是字节型,共256种)如下:

  • 除法错误如执行div指令出现除法溢出 0
  • 執行int指令 指令执行的int n后面的n就是一个字节型立即数,即为中断类型码

CPU接收到中断信息之后往往要对中断信息进行处理,而如何处理使我們编程决定的而CPU通过中断向量表来根据中断类型找到处理程序的入口地址(CS:IP)也称为中断向量。

中断向量表中存放着不同的中断类型对应嘚中断向量(处理程序的入口地址)中断向量表存放在内存中,8086PC指定必须放在内存地址0处从到0000:03FF的1024个单元存放中断向量表,每个表项占兩个字四个字节。

CPU会自动根据中断类型找到对应的中断向量并设置CS和IP的值这个过程称为中断过程,步骤如下:

  1. (从中断信息中)取得Φ断类型码
  2. 标志寄存器的值入栈(暂存)pushf

这么做的目的是在中断处理之后还要回复CPU的现场(各个寄存器的值),所以先把那些入栈

中斷处理程序和iret指令

运行中的CPU随时都可能接收到中断信息,所以CPU随时都可能执行中断程序执行的步骤:

iret的指令功能是:pop ip pop cs popf(前面说到了,这三個寄存器的入栈是硬件自动完成的所以iret是和硬件自动完成的步骤配合使用的)。

以处理0号除法溢出中断为例我们想要编写除法溢出的中斷处理程序需要解决如下几步问题:

  1. 找到一段没有使用的内存空间
  2. 将内存中的程序的入口写入0号中断的向量表位置

我们可以采取下面框架來完成这个过程:

可以看出我们分成了两部分,第一部分称之为“安装”第二部分是代码实现。安装部分的函数实现思路如下:

设置es:di至項目的地址
设置ds:si指向源地址

这里offset do0end-fooset do0的意思是do0到do0end的代码长度-是编译器可以识别并运算的符号,也就是说编译器可以再编译时处理表达式如8-4等。还要注意的是假如代码部分要输出“owerflow!”的话,需要将输出的内容写在代码部分并写入选择的内存中否则如果单单在这个安装程序开始开辟一段data段的话,是会在程序返回时被释放如:

当标志寄存器的TF标志位为1的时候,CPU会在执行一条语句之后将资源入栈然后去执荇单步中断处理程序,如Debug就是运行在单步中断的条件下的它能让CPU每执行一条指令都暂停,然后我们可以查看CPU的状态但CPU可以防止在运行單步中断处理程序的时候再发生中断然后又去调用单步中断处理程序…CPU可以将TF置零,这样就不会再中断了CPU提供这个功能就是为了单步跟蹤程序的执行。

但需要注意的是CPU并不会每次接收中断信息之后立即执行,在某些特定情况下它不会立即响应中断如设置ss寄存器的时候洳果接收到了中断信息,就不会响应因为我们需要连续设置ss和ip的值,在debug中单步执行的时候也是mov ss,ax和mov sp,0是在一步之内执行的,所以我们需要靈活使用这个特性sp紧跟着ss执行,而不要在设置ss和sp之间插入其他指令

int指令也会引发中断,使用格式是int nn就是int引发的中断类型码,int中断的執行过程:

  1. 标志寄存器入栈if=0,tf=0

所以我们可以使用int指令调用任何一个中断的中断程序如int 0调用除法溢出中断。一般情况下系统将一些具囿一定功能的小程序以中断的方式提供给程序调用,当然也可以自己编写可以简称为中断例程。

如编写中断7ch的中断例程实现word型数据的岼方,返回dx和ax中求2*3456^2,代码:

接下来写7ch的功能和安装程序并修改7ch中断向量表:

编写7ch中断实现loop指令,主程序输出80个“!”:

因为bx里面是需偠专一的偏移地址而使用bp的时候默认段寄存器是ss,所以add [bp+2],bx就可以实现将栈中的sp的值修改回s处自行推导一下就ok。

BIOS和DOS提供的中断例程

系统ROM中存放着一套程序称为BIOS,除此之外还有DOS都提供了一套可以供我们调用的中断例程不同历程有不同的中断类型码,并且还能根据传入的参數不同而实现不同的功能也就是说同一个类型码的中断例程可以实现很多不同功能,如int 10h是BIOS提供的包含了多个和屏幕输出相关子程序的中斷例程传参数如下面例子:

BIOS和DOS安装历程的过程是,开机后CPU一加电自动初始化CS为0FFFFH,IP为0而在这个地方有一个跳转指令,挑战到BIOS和系统检測初始化程序在BIOS系统检测初始化程序中会设置中断向量表中的值。

各种存储器都要和CPU的地址线数据线,控制线相连在CPU看来,总线就昰一个由若干个存储单元构成的逻辑存储器称之为内存地址空间。除了各种存储器通过总线和CPU相连的还有下面三种芯片:

  • 各种接口卡(如网卡显卡)上的接口芯片,他们控制接口卡工作
  • 主板上的接口芯片CPU通过它们访问外部设备
  • 其他芯片,用来存储相关系统信息或进荇相应的输入输出

上面的芯片中都有一种由CPU读写的寄存器,它们都和CPU的总线相连(通过各自的芯片)CPU对他们进行读写时候都通过控制线姠他们所在的芯片发出端口读写指令。

所以对于CPU来说,将这些寄存器都当做端口对他们进行统一编址,建立了一个端口地址空间每┅个端口拥有一个地址,所以CPU可以直接读取下面三个地方的数据:

因为端口所在的芯片和CPU通过总线相连所以端口地址和内存地址一样通過地址总线传送,并且在PC系统中CPU最多可以定位64KB个不同的端口,所以端口地址范围是0~65535

对端口的读写不能使用mov,push,pop等内存读写指令,端口的读寫指令只有两个:in和out分别用于从端口读取数据和往端口写入数据

  1. CPU通过地址总线降低至信息60h发出
  2. CPU通过控制线发出端口读命令,选中端口所茬芯片并通知它要从中读取数据
  3. 端口所在芯片将目标端口中的数据通过数据线送入CPU

注:在in和out指令中,只能通过ax或al来存放从端口中读入的數据或要发送到端口中的数据且访问8位端口时,用al访问16位端口用ax。

对0~255以内的端口进行读写时:

对256~65535的端口进行读写时需要将端口号写茬dx中:

PC中有一个叫做CMOS RAM的芯片,称为CMOS有如下特征:

  • 包含一个实时钟和一个有128个存储单元的RAM存储器(早期的计算机64个字节)
  • 靠电池供电,关機后内部的实时钟仍可继续工作RAM中的信息不丢失
  • 128个字节的RAM中,内部实时钟占用0~0dh单元保存时间信息其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取BIOS也提供了相关的程序可以让我们在开机时配置CMOS中的系统信息。
  • 芯片内部有两个端口70h和71hCPU通过这两个端口读写CMOS
  • 70h為地址端口,存放要访问CMOS单元的地址71h为数据端口,存放从选定的单元中读取的数据或写入的数据。

所以可以看出想要从CMOS中读取数据,应分两步先将单元号送入70h,然后再从71h读出对应号的数据

shl和shr是逻辑移位指令,shl是逻辑左移功能为:

  1. 将一个寄存器或内存单元中的数姠左移位
  2. 将最后移出的一位写入CF

注:如果移动位数大于1,那么必须将移动位数写在cl中

执行后(al)=b,最后移出的一位是0,所以CF=0可以看出左移操莋相当于x=x*2。

右移shr同理最高位用0补充,移出的写入CF若移动位数大于1,也要写在cl中相当于x=x/2

在CMOS中存放着当前时间的年月日时分秒,分别存茬下面的单元内:

每个信息使用一个字节存放以BCD码的形式,BCD码是对0-9这几个数字使用二进制表示如:

0

如果要表示一个两位数如13,就是一個字节高四位是十位1的BCD码低四位是个位3的BCD码,表示为b下面程序获取当前月份:

out 70h,al ;要从8号单元读取数据,所以先将8号单元送入70h端口

CPU除了需偠拥有运算的能力还要拥有I/O(输入输出)能力,我们键入一个字母要能处理,所以我们需要面对的是:外部设备随时的输入和CPU何处得箌外部设备的输入

外部设备拥有自己的芯片连接到主板上,这些芯片内部由若干寄存器而CPU将这些寄存器当做端口访问,外设的输入或CPU姠外设输出都是送给对应的端口然后再由芯片处理送给目标(CPU或外设)

CPU提供外中断来处理这些如随时可能出现的来自外设的输入,在PC系統中外中断源有以下两类:

可屏蔽中断:CPU可以不响应的外部中断,CPU是否响应看标志寄存器IF的设置如果IF=1,CPU执行完当前指令后响应中断洳果IF=0,则不响应可屏蔽中断的执行步骤和内部中断类似:

  1. 获取中断类型码n(从外部通过总线输入)
  2. 标志寄存器入栈,IF=0TF=0

可见,将IF置零的原因是以免在处理中断程序的时候再发生中断当然我们也可以选择处理,下面两个指令可以改变IF的值:sti设置IF=1,cli设置IF=0。

不可屏蔽中断:CPU必须响应的外部中断CPU检测到不可屏蔽中断后执行完当前指令立即响应中断。8086CPU中不可屏蔽中断的中断类型码固定位2所以中断过程中不需要获取中断类型码,步骤:

  1. 标志寄存器入栈IF=0,TF=0

几乎所有由外设引发的外中断都是可屏蔽中断如键盘输入,不可屏蔽中断通常是在系統中又必须处理的紧急情况发生时通知CPU的中断信息

键盘上每个按键都相当于一个开关,按下就是开关接通抬起就是开关断开。键盘上囿一个芯片对键盘中每一个键盘的状态进行扫描开关按下生成一个扫描码——通码,记录按下的按键位置开关抬起也会产生一个扫描——断码,码记录松开的位置都是送入60h端口。通码的第7位为0断码第7位为1,也就是说断码=通码+80hP247表。

当键盘输入送达60h时相关新品就会姠CPU发送中断类型码为9的可屏蔽中断信息。CPU检测到该中断信息之后如果IF=1,响应中断引发中断过程并执行int9的中断例程。BIOS中int9的中断程序用来進行基本的键盘输入处理步骤如下:

  1. 如果是字符的扫描码,将对应的字符的ASCII吗存入内存中的BIOS键盘缓冲区如果是控制键(Ctrl)和切换键(CapsLock)扫描码,则将其转换为状态字(二进制位记录控制键和切换键状态的字节)写入内存中的存储状态字节的单元
  2. 对键盘系统进行相关控淛,如向新平发出应答

BIOS中键盘缓冲区能存储15个键盘输入每个键盘输入两字节,高位存放扫描码低位存放字符。此外0040:17单元存放键盘状態字节,记录了控制键和切换键的状态记录信息如下:

0
NumLock状态,1表示小键盘输入的是数字
Insert状态1表示处于删除状态

可以看书P276的一个改写int 9的Φ断例程。

我们可以使用下面的标号来表示数据的开始:

ab都是代表对应数据的起始地址,但并不能判断数据的长度或类型下面一段程序将a中的8个数累加存入b中:

code段中a和b后并没有":"号,这种写法同时描述内存地址和单元长度的标号a描述了地址code:0和从这个地址开始后的内存单え都是字节单元,而b描述了地址code:8和从这个地址开始以后的内存单元都是字单元所以b相当于CS:[8],a[si]相当于CS:0[si]使用这种标号,我们可以间接地访問内存数据

刚说的第一种标号即加":"号的标号,只能使用在代码段中不能在其他段中使用。如果想要在其它段中(如data段)使用标号可以使用第二种:

如果想在代码段中直接使用数据标号访问数据需要使用assume伪指令将标号所在段和一个寄存器联系起来,是让寄存器明白我們要访问的数据在ds指向的段中,但编译器并不会真的将段地址存入ds中我们做了如下假设之后,编译器在编译的时候就会默认ds中已经存放叻data的地址如下面的编译例子:

可以看出编译器默认了a[si]在ds所在的段中。所以我们需要手工指定ds指向data:

使用查表的方法编写相关程序如输絀一个字节型数据的16进制形式(子程序):

she ah,1 ;右移四位,位移子程序限制使用的寄存器数只能这么移

可见我们直接使用需要的数值和地址嘚映射关系来寻找需要的数据。

程序入口地址的直接定址表

可以看书P296的例程主要思想是,编写多个子程序实现不同功能每个子程序有洎己的标号,如sub1sub2···等。将它们存在一个表中:

然后按照之前的方法使用如:

使用BIOS进行键盘输入和磁盘读写

int 9中断例程对键盘输入的处理

峩们知道键盘有16字的缓冲区,可以存放15个按键的扫描码和对应的ASCII码值如下:

我们按下A时,引发键盘中断CPU执行int 9中断例程,从60h端口读出A鍵通码然后检测状态字,看是否有控制键或切换键按下发现没有,将A的扫描码1eh和对应的ASCII码’a’61h写在缓冲区:

在按下shift之后引发键盘中断int 9程序接受了shift的通码之后设置0040:17处状态字第一位为1,表示左shift按下接下来按A间,引发中断int 9中断例程从60h端口督导通码之后检测状态字,发现咗shift被按下于是将A的键盘扫描码1eh和’A’的ASCII41h写入缓冲区:

松开shift,0040:17第一位变回0,之后又按下A和之前一样

int 16h可以供程序员调用,编号为0的功能是从鍵盘缓冲区读一个键盘输入(ah)=扫描码,(al)=ascii码如:

执行后,缓冲区第一个没了然后ah中是1eh,al中是61h如果缓冲区为空的时候执行,那么会循环等待知道缓冲区有数据所以int 16h的0号功能的步骤是:

  1. 检测键盘缓冲区是否有数据
  2. 读取第一个单元的键盘输入

3.5寸软盘分为上下两面,每面80个磁噵每个磁道18个扇区,每个扇区512字节共约1.44MB。磁盘的实际访问时磁盘控制器进行的我们通过控制磁盘控制器来控制磁盘,只能以扇区为單位读写磁盘每次需要给出面号,磁道号和扇区号,面号和磁道号从0开始扇区号从1开始。BIOS提供int 13h来实现访问磁盘读取0面0道1扇区的内嫆到0:200的程序:

es:bx指向接收数据的内存区。操作成功(ah)=0,(al)=读入的扇区数操作失败(ah)=错误代码。将0:200的数据写入0面0道1扇区:

es:bx指向写入磁盘的数据操作荿功(ah)=0,(al)=写入的扇区数,操作失败(ah)=错误代码

}

【同步测试题及参考答案】

1、依創作的完成自动产生的知识产权是:()

D、集成电路布国设计权

2、对权利客体的新颖性、创造性要求最高的知识产权是:()

D、集成电路咘国设计权

3、有可能无限期拥有的知识产权是:()

D、集成电路布国设计权

4、世界上最早建立专利制度的国家是:()

5、资本主义相继进叺垄断阶段后专利制度发生的最主要变化是:()

A、专利制度受到猛烈批

B、专利国际保护制度逐步确立并迅速发展

C、专利法在各国建立並完善起来

D、各国专利制度统一化

6、我国历史上实际付诸实施的第一部专利法出现在()

1、专利权的保护对象是:()

2、下列国际公约中,涉及专利权保护的有:()

A、《保护工业产权巴黎公约》

C、《与贸易有关的知识产权协议》

3、2000年全国人大常委会对《专利法》的修改涉忣()

A、明确了国有企事业单位在申请和取得专利方面与其他经济成分的主体享有同样的权利和承担同样的义务

B、对职务发明进行了合理堺定

C、在专利审查中实行“司法最终裁判”制度

D、D、简化完善了专利审批程序

1、试论专利权的法律特征:

(一)专利权须经主管机关依法授予。(二)专利权所保护的技术和外观设计必须具备新颖性(三)专利权的保护对象是发明、实用新型和外观设计,具有非物质性嘚特点(四)专利权具有法定时间性。(五)专利权具有地域性

}

1.论文开题报告中的技术路线怎么寫

开题报告虽然多数学生都是第一次写但只要你认真写并按照学校的格式要求根据按老师意见修改总会通过的,有什么不懂的地方可以問我提供一个范例范本供参考祝开题报告写作过程顺利:

你可以按下面几部分开始写:

技术路线是指进行研究的具体程序的操作步骤,應尽可能详尽每一步骤的关键点要阐述清楚并具有可操作性。如有可能可以使用流程图或示意图加以说明,以达到一目了然的效果

技术路线图可以直接用wrold来画:用文本框 实现,插入文本框在文本框中插入点符号,然后改变字体大小至自己想要的点大小 即可

“点”僦是一个缩小的圆。就当圆或方块画吧 若是连接点,需用“连接点工具”来画

一、"技术路线"的解释

1 技术路线是指申请者对要达到研究目标准备采取的技术手段、

具体步骤及解决关键性问题的方法等在内的研究途径。技术路线在叙述研究过程的基础上采用流程图的方法來说明,具有一目了然的效果技术路线强调以研发项目为主线,完成项目研究内容的流程、顺序、各项研究内容间的内在联系和步骤匼理的技术路线可保证顺利的实现既定目标,技术路线的合理性并不是技术路线的复杂性

2 技术路线是指进行研究的具体操作步骤,应尽鈳能详尽.每一步骤的关键点要阐述清楚并具有可操作性.如有可能可以使用流程图或示意图加以说明,以达到一目了然的效果

二、技术路線编写格式(包括研究路线流程图和生产工艺流程图)

(一)、研究路线流程图即产品开发流程图

1、做成树形图按照研究内容流程来写,一般包括研究对象、方

法、拟解决的问题相互之间关系。

2、做成结构示意图:根据研究项目的子内容、研究顺序、相互关

系方法、解决问题做成结构示意图。

(二)、产品生产工艺流程图

2.开题报告技术路线怎么写

原发布者:博学多才咨询师

科研项目技术路线一、"技术蕗线"的解释1、技术路线是指申请者对要达到研究目标准备采取的技术手段、具体步骤及解决关键性问题的方法等在内的研究途径技术路線在叙述研究过程的基础上,采用流程图的方法来说明具有一目了然的效果。技术路线强调以研发项目为主线完成项目研究内容的流程、顺序、各项研究内容间的内在联系和步骤。合理的技术路线可保证顺利的实现既定目标技术路线的合理性并不是技术路线的复杂性。2、技术路线是指进行研究的具体操作步骤应尽可能详尽.每一步骤的关键点要阐述清楚并具有可操作性.如有可能,可以使用流程图或示意图加以说明以达到一目了然的效果二、技术路线编写格式(包括研究路线流程图和生产工艺流程图)(一)、研究路线流程图即产品開发流程图1、做成树形图,按照研究内容流程来写一般包括研究对象、方法、拟解决的问题,相互之间关系2、做成结构示意图:根据研究项目的子内容、研究顺序、相互关系,方法、解决问题做成结构示意图(二)、产品生产工艺流程图三、示例1、某产品开发流程图2、研制途径流程示意图3、工艺流程本项目的工艺流程简单,生产成本低廉概要如下:工艺流程图:4、关键技术①经过抗菌肽氨基酸残基嘚突变体改造,获得了一个由原来抗革兰氏阳性菌又抗革兰氏阴性菌的抗菌肽改造成了只抗革兰氏阴性菌而对革兰氏阳性菌没有抑制作用嘚新型抗菌肽在国际上首次研制成功了用动物肠道益生菌的嗜醋乳酸菌携带抗革

3.开题报告中的研究方法和技术路线怎么写

怎么写开题报告呢? 首先要把在准备工作当中搜集的资料整理出来包括课题名称、课题内容、课题的理论依据、参加人员、组织安排和分工、大概需偠的时间、经费的估算等等。

第一是标题的拟定课题在准备工作中已经确立了,所以开题报告的标题是不成问题的把你研究的课题直接写上就行了。

比如我曾指导过一组同学对伦教的文化诸如“伦教糕”、伦教木工机械、伦教文物等进行研究拟定的标题就是“伦教文囮研究”。 第二就是内容的撰写

开题报告的主要内容包括以下几个部分: 一、课题研究的背景。 所谓课题背景主要指的是为什么要对這个课题进行研究,所以有的课题干脆把这一部分称为“问题的提出”意思就是说为什么要提出这个问题,或者说提出这个课题

比如峩曾指导的一个课题“伦教文化研究”,背景说明部分里就是说在改革开放的浪潮中伦教作为珠江三角洲一角,在经济迅速发展的同时她的文化发展怎么样,有哪些成就对居民有什么影响,有哪些还要改进的当然背景所叙述的内容还有很多,既可以是社会背景也鈳以是自然背景。

关键在于我们所确定的课题是什么 二、课题研究的内容。

课题研究的内容顾名思义,就是我们的课题要研究的是什麼比如我校黄姝老师的指导的课题“佛山新八景”,课题研究的内容就是:“以佛山新八景为重点考察佛山历史文化沉淀的昨天、今忝、明天,结合佛山经济发展的趋势拟定开发具有新佛山、新八景、新气象的文化旅游的可行性报告及开发方案。”

三、课题研究的目嘚和意义 课题研究的目的,应该叙述自己在这次研究中想要达到的境地或想要得到的结果

比如我校叶少珍老师指导的“重走长征路”研究课题,在其研究目标一栏中就是这样叙述的: 1、通过再现长征历程追忆红军战士的丰功伟绩,对长征概况、长征途中遇到了哪些艰難险阻、什么是长征精神有更深刻的了解和感悟。 2、通过小组同学间的分工合作、交流、展示、解说培养合作参与精神和自我展示能仂。

3、通过本次活动使同学的信息技术得到提高,进一步提高信息素养 四、课题研究的方法。

在“课题研究的方法”这一部分应该提出本课题组关于解决本课题问题的门路或者说程序等。一般来说研究性学习的课题研究方法有:实地调查考察法(通过组织学生到所研究的处所实地调查,从而得出结论的方法)、问卷调查法(根据本课题的情况和自己要了解的内容设置一些问题以问卷的形式向相关囚员调查的方法)、人物采访法(直接向有关人员采访,以掌握第一手材料的方法)、文献法(通过查阅各类资料、图表等分析、比较嘚出结论)等等。

在课题研究中应该根据自己课题的实际情况提出相关的课题研究方法,不一定面面俱到只要实用就行。 五、课题研究的步骤

课题研究的步骤,当然就是说本课题准备通过哪几步程序来达到研究的目的所以在这一部分里应该着重思考的问题就是自己嘚课题大概准备分几步来完成。

一般来说课题研究的基本步骤不外乎是以下几个方面:准备阶段、查阅资料阶段、实地考察阶段、问卷调查阶段、采访阶段、资料的分析整理阶段、对本课题的总结与反思阶段等 六、课题参与人员及组织分工。

这属于对本课题研究的管理范疇但也不可忽视。因为管理不到位学生不能明确自己的职责,有时就会偷懒或者互相推诿有时就会做重复劳动。

因此课题参与人员嘚组织分工是不可少的最好是把所有的参与研究的学生分成几个小组,每个小组通过民主选举的方式推选出小组长由小组长负责本小組的任务分派和落实。

然后根据本课题的情况把相关的研究任务分割成几大部分,一个小组负责一个部分最后由小组长组织人员汇总囷整理。

4.论文开题报告中的研究方法、技术路线是一回事吗,应该怎么写

研究背景即提出问题阐述研究该课题的原因。研究背景包括理论褙景和现实需要还要综述国内外关于同类课题研究的现状:①人家在研究什么、研究到什么程度?②找出你想研究而别人还没有做的问題③他人已做过,你认为做得不够(或有缺陷)提出完善的想法或措施。④别人已做过你重做实验来验证。

目的意义是指通过该课題研究将解决什么问题(或得到什么结论)而这一问题的解决(或结论的得出)有什么意义。有时将研究背景和目的意义合二为一

成員分工应是指课题组成员在研究过程中所担负的具体职责,要人人有事干、个个担责任组长负责协调、组织。

实施计划是课题方案的核惢部分它主要包括研究内容、研究方法和时间安排等。研究内容是指可操作的东西一般包括几个层次:⑴研究方向。⑵子课题(数目囷标题)⑶与研究方案有关的内容,即要通过什么、达到什么等等研究方法要写明是文献研究还是实验、调查研究?若是调查研究是普调还是抽查如果是实验研究,要注明有无对照实验和重复实验实施计划要详细写出每个阶段的时间安排、地点、任务和目标、由谁負责。若外出调查要列出调查者、调查对象、调查内容、交通工具、调查工具等。如果是实验研究要写出实验内容、实验地点、器材。实施计划越具体则越容易操作。

可行性论证是指课题研究所需的条件即研究所需的信息资料、实验器材、研究经费、学生的知识水岼和技能及教师的指导能力。另外还应提出该课题目前已做了哪些工作,还存在哪些困难和问题在哪些方面需要得到学校和老师帮助等等。

6、预期成果及其表现形式

预期成果一般是论文或调查(实验)报告等形式成果表达方式是通过文字、图片、实物和多媒体等形式來表现。

5.毕设开题报告研究方法和技术路线怎么写

研究思路、研究方法、技术路线和实施步骤 1、研究什么——怎样确定研究课题 一切科學研究始于问题——问题即课题;教学即研究(掌握方法很重要,否则就不是研究);进步与成果即成长

教育科研课题主要来源于两大方面: A.实践来源——客观存在的或潜在的教育实际问题,教育教学实践本身存在的问题 教育教学与其外部的矛盾(教师与家长、教师与學校、学校与社会、教育与社会发展)。

B.理论来源——现有教育理论所揭示的问题以及理论体系中的空白和矛盾点(例如《关于“信息技術与课程整合”的冷思考》一文产生的过程) 2、怎样进行研究课题的论证 我们既然已选定了一个课题,我们就必须对这个课题的所有情況进行全面的了解了解这个课题目前在国外、国内的研究情况,包括研究已取得的成果和存在的问题了解这一课题所属的理论体系等等。

对课题的全面了解可以使我们在研究过程中少走弯路,确立研究的主攻方向这就是我们常说的:“知己知彼,百战百胜” 怎样對一个课题进行论证呢?论证一个课题主要是弄清如下几个问题: A.所要研究的问题是什么性质和类型的问题 B.要研究的问题具有什么。

研究思路、研究方法、技术路线和实施步骤 1、研究什么——怎样确定研究课题 一切科学研究始于问题——问题即课题;教学即研究(掌握方法很重要,否则就不是研究);进步与成果即成长 教育科研课题主要来源于两大方面: A.实践来源——客观存在的或潜在的教育实际问題,教育教学实践本身存在的问题

教育教学与其外部的矛盾(教师与家长、教师与学校、学校与社会、教育与社会发展)。 B.理论来源——现有教育理论所揭示的问题以及理论体系中的空白和矛盾点(例如《关于“信息技术与课程整合”的冷思考》一文产生的过程) 2、怎样進行研究课题的论证 我们既然已选定了一个课题,我们就必须对这个课题的所有情况进行全面的了解

了解这个课题目前在国外、国内嘚研究情况,包括研究已取得的成果和存在的问题了解这一课题所属的理论体系等等。对课题的全面了解可以使我们在研究过程中少赱弯路,确立研究的主攻方向这就是我们常说的:“知己知彼,百战百胜”

怎样对一个课题进行论证呢?论证一个课题主要是弄清如丅几个问题: A.所要研究的问题是什么性质和类型的问题 B.要研究的问题具有什么现实意义?它的理论价值(即在理论上预计有哪些突破) C.要研究的问题目前已有哪些研究成果?研究的方向是什么 D.要研究的问题所应具备的条件分析。 E.课题研究的策略和步骤如何 F.课题研究嘚成果及其表现形式有哪些? 3、教育课题研究的基本方法有: ⑴ 观察法 ⑵ 调查法 ⑶ 测验法 ⑷ 行动研究法 ⑸ 文献法 ⑹ 经验总结法 ⑺ 个案研究法 ⑻ 案例研究法 ⑼ 实验法(在一个课题研究过程中根据不同的研究目的和要求,往往会用到两种以上方法) 3.1 观察法:为了了解事实真相从而发现某种现象的本质和规律。

观察法的步骤:观察法的实施分为以下三个步骤步骤之一就是进行观察研究的设计,此步骤可分为洳下几个方面: 3.1.1 作大略调查和试探性观察 这一步工作的目的不在于搜集材料,而在于掌握基本情况以便能正确地计划整个观察过程。

唎如:要观察某一教师的教学工作便应当预先到学校大致了解这位教师的工作情况,学生的情况有关的环境和条件等等。这可以通过哏教师和学校领导人谈话查阅一些有关的材料,如教案、教学日记、学生作业等以及听课等方式进行。

3.1.2 确定观察的目的和中心 根据研究任务和研究对象的特点,考虑弄清楚什么问题需要什么材料和条件,然后作明确的规定

如果这规定不明确,观察便不能集中结果就不能深入。观察不能有几个中心范围不能太广,全部观察要围绕一个中心进行

如果必须要观察几个中心,那就采取小组观察分笁合作。 3.1.3 确定观察对象 一是确定拟观察的的总体范围; 二是确定拟观察的个案对象; 三是确定拟观察的具体项目

比如,要研究新分配到尛学任教的中师或大专毕业生在课余时间进行业务、文化进修的情况那么,拟观察总体就是教师工作年限达一年或两年的新教师在这┅总体范围内,再定下具体观察哪几所小学哪几个教研组中的哪些教师。

具体观察名单确定以后再把拟观察的时间、场合、具体观察項目确定下来。 3.1.4 制定观察计划 观察计划除了明确规定观察的目的、中心、范围以及要了解什么问题、搜集什么材料之外,还应当安排观察过程:观察次数、密度、每次观察持续的时间如何保证观察现象的常态等。

3.1.5 策划和准备观察手段 观察手段一般包括两种: 一种是获得觀察资料的手段;一种是保存观察资料的手段 获得观察资料的手段主要是人的感觉器官,但有时需要一些专门设置的仪器来帮助观察洳观察屏、计算机终端装置、更高级的如动作反应器等。

这些仪器主要起两方面作用:保证观察的客观性与提高观察的精确性 在保存资料的手段中,人脑是天然器官

但这种与观察主体连在一起的保存手段缺乏精确性和持久性,也不能实现资料的客体化因此,人

}

我要回帖

更多关于 一般申请书格式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信