随笔分类 -  汇编学习

汇编
汇编 db,dw,dd的区别
摘要:db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4 阅读全文

posted @ 2014-09-15 20:05 wanghj_dz 阅读(62642) 评论(3) 推荐(4)

push 栈顶sp=sp-2 可以把立着的栈,向左侧倒下,那么形态就和反汇编时,内存的形态是一样的。小偏移的字节在前, 大的偏移字节在后
摘要:push 栈顶sp=sp-2 可以把立着的栈,向左侧倒下,那么形态就和反汇编时,内存的形态是一样的。小偏移的字节在前, 大的偏移字节在后。1234512345 阅读全文

posted @ 2014-09-13 17:02 wanghj_dz 阅读(247) 评论(0) 推荐(0)

在8086中,[ idata],[bx]表示内存单元时。可能是一个字节,也可能是一个字。
摘要:可能表示一个字节,也可能表示一个字。主要由指令中另一个计算对象决定。如al表示一个字节。ax就表示一个字。这个区别主要体现在循环中,偏移地址的循环变量是加1还是加2,al是偏移地址加1,ax是偏移地址加2.[idata],[bx]表示的是偏移地址。[idata],[bx]是有区别的。在代码中mov ... 阅读全文

posted @ 2014-09-13 15:49 wanghj_dz 阅读(360) 评论(0) 推荐(0)

汇编语言第二版 程序在dos中执行情况.P86-87
摘要:假设程序要被dos系统加载到sa:0000的内存中,在这个地址的内存开始会有256个字节的PSP程序,用于加载程序和dos系统的通信。ds中的地址为sa。真正的程序会在这256个字节之后。所以真正程序的地址是:sa+10H:0000。cs中的地址为:sa+10h为什么是10h,因为段地址要左偏移4位... 阅读全文

posted @ 2014-09-13 11:04 wanghj_dz 阅读(218) 评论(0) 推荐(0)

汇编 堆栈问题
摘要:指令push,pop push,pop的执行单位为一个字。2个字节。 push sp先减2,得到新的栈顶,实际上就是空出一个字,2个字节的空间,以便放入新的数据。 然后将数据调入。 pop先将数据调出,然后sp+2,指向新的栈顶。 记忆方法:push含有s所以先进行sp的操作。 pop... 阅读全文

posted @ 2014-09-12 23:03 wanghj_dz 阅读(454) 评论(0) 推荐(0)

cs ip 通过jmp转移命令间接赋值。无法直接对其赋值。
摘要:jmp寄存器命令对IP间接赋值。 阅读全文

posted @ 2014-09-12 20:44 wanghj_dz 阅读(196) 评论(0) 推荐(0)

8086 cpu为什么要把段地址*16+偏移量形成物理地址呢?
摘要:8086 cpu为什么要把段地址*16+偏移量形成物理地址呢?这是因为,8086地址线是20位,段寄存器是16位,将段寄存器*16实际上就是向左移动4位,形成20位和8086的二十位地址线匹配. IP(Instruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;... 阅读全文

posted @ 2014-09-12 17:07 wanghj_dz 阅读(839) 评论(0) 推荐(0)

一个字 word 是16位, 一个字由两个字节组成 , 字节=byte ,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit
摘要:一个字 word 是16位, 一个字由两个字节组成 , 字节=byte,,一个字节8位, 位=bit如果没有特殊说明kb 就是指 k*bitkbyte= k*byte 阅读全文

posted @ 2014-05-29 14:46 wanghj_dz 阅读(7405) 评论(0) 推荐(1)

物理地址为20位 如10000H 用段地址*16+偏移地址表示
摘要:段地质在cpu中,为16位段地质*16则变成物理首地址20位,这个物理首地址必定是16的倍数.偏移地址16位, 则表明一个段的大小为64k.同时也表明16位地址的寻址能力为64kb 阅读全文

posted @ 2014-05-29 11:02 wanghj_dz 阅读(460) 评论(0) 推荐(0)

一些简单的问题. 2的10次方与k (涉及到b k m的要用乘来解读)
摘要:2的10次方是kk就表示2的10次方2的16次方,解读为 2的6次方(64)*2的10次方(k) 简写为64k 64k=64*k同理2的20次方 解读为2的10次方*2的10次方 k*K=1M64kb =64*k*bk=1024=2的10次方b=bit=2 阅读全文

posted @ 2014-05-29 10:44 wanghj_dz 阅读(1159) 评论(0) 推荐(0)

汇编中,BP,SP有何区别?分别怎么使用?
摘要:bp寄存器,跟其它什么BX,AX一样的用法,SP是用在栈上的,配合SS使用,像SS:SPSS上放段地址,SP上放偏移地址。寻址时,像[bp],相当于SS:[bp]就是说它默认使用SS像BX默认使用CS--------------------------------------------------... 阅读全文

posted @ 2014-05-21 17:03 wanghj_dz 阅读(5616) 评论(0) 推荐(0)

汇编函数调用中bp和sp是指什么?
摘要:bp为基址寄存器,一般在函数中用来保存进入函数时的sp的栈顶基址sp是栈顶指针,它每次指向栈顶。每次子函数调用时,系统在开始时都会保存这个两个指针并在函数结束时恢复sp和bp的值。像下面这样:在函数进入时:pushbp//保存bp指针movbp,sp//将sp指针传给bp,此时bp指向sp的基地址。... 阅读全文

posted @ 2014-05-21 16:59 wanghj_dz 阅读(5659) 评论(0) 推荐(0)

汇编语言中,SP,BP ,SI,DI作用?
摘要:这个很简单:sp:表示栈顶指针,指向栈顶地址.与SS相配合使用.ss为栈段.bp:是基址指针,段地址默认在SS中.可以定位物理地址,比如:"mov ax,[bp+si+6]/mov ax,[bp+di+6].DI:是目的变址寄存器.一般情况下与ds联用,来确定某个储存单元的地址.SI:是源变址寄存器... 阅读全文

posted @ 2014-05-21 16:47 wanghj_dz 阅读(22900) 评论(1) 推荐(2)

or al,al
摘要:这行语句是将AL和AL做或运算,结果放到AL中,同时根据结果修改标志位。而后面的JNZ则是根据Z标志位而进行判断,决定是否跳转。例如,如果前面AL=1h,那么OR语句后AL还是1h,但是Z标志位为0了,进而JNZ条件成立,就会跳转。而如果前面AL=0h,那么OR之后还是0,Z标志位为1,这样JNZ就不成立了,不跳转。------------------------------------------------------------------------------------------------------------其实or al,al 就是判断al是否为0。al的值不变。 阅读全文

posted @ 2011-06-06 12:20 wanghj_dz 阅读(351) 评论(0) 推荐(0)

模块、实例和任务
摘要:可从 Microsoft 下载中心下载以下文件:Mti.exe (http://download.microsoft.com/download/platformsdk/mti/3.1/w31/en-us/mti.exe) 有关如何下载 Microsoft 支持文件的其他信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 119591 (http://support.microsoft.com/kb/119591/EN-US/ ) 如何从联机服务获得 Microsoft 支持文件 Microsoft 扫描此文件的病毒。Microsoft 使用该文件已过帐的日期上获得的最新 阅读全文

posted @ 2011-05-31 15:18 wanghj_dz 阅读(598) 评论(0) 推荐(0)

Win32EXE.tpl 代码详解
摘要:WinMain proto :DWORD,:DWORD,:DWORD,:DWORD这是个函数原型声明。类似c语言中的 int WinMain(long a,long b,long c,long d);函数的返回值放在eax中返回。 阅读全文

posted @ 2011-05-30 09:50 wanghj_dz 阅读(271) 评论(1) 推荐(0)

汇编学习的环境搭建
摘要:汇编学习的书籍选择王爽、杨季文的书软件使用:Emu8086.exe V3.07视频教程:大灰狼汇编教程 阅读全文

posted @ 2011-05-21 19:10 wanghj_dz 阅读(261) 评论(0) 推荐(0)

nl DB 13, 10, '$' ,int 21h详解
摘要:nl DB 13, 10, '$'13是回车10是换行'$'表示已经到了字符串尾,不在打印字符了。int 21 调用参数 返回参数AH=09 显示字符串DS:DX=串地址,'$'结束字符串AH=0A 键盘输入到缓冲区DS:DX=缓冲区首地址 (DS:DX)=缓冲区最大字符数(DS:DX+1)=实际输入的字符数#make_COM# ORG 100H ; set data segment: MOV AX, CS MOV DS, AX MOV ES, AX; input a string: MOV DX, OFFSET s1 MOV AH, 0AH I 阅读全文

posted @ 2011-05-15 09:37 wanghj_dz 阅读(1131) 评论(0) 推荐(0)

导航