随笔分类 -  assembly

摘要:1- ret 相当于 pop IP;用栈中数据,修改IP内容.从而实现近转移.执行后(IP)=0, CS:IP指向代码段的第一条指令. 1 assume cs:code 2 stack segment 3 db 16 dup(0) 4 stack ends 5 code segment 6 ... 阅读全文
posted @ 2014-06-14 15:19 galoishelley 阅读(578) 评论(0) 推荐(0)
摘要:1 ;在屏幕中间分别显示绿色,绿底红色,白底蓝色字符串"welcome to masm!" 2 assume cs:codesg,ds:datasg,ss:stacksg 3 datasg segment 4 db 'welcome to masm!' 5 db 02h,24h,71h 6 datasg ends 7 stacksg segment 8 db 8 dup(0) 9 stacksg ends10 codesg segment11 start: mov ax,datasg12 mov ds,ax13 14 ... 阅读全文
posted @ 2014-03-05 10:37 galoishelley 阅读(3027) 评论(0) 推荐(1)
摘要:1- jcxz指令 指令为有条件转移指令, 所有的有条件转移指令都是短转移, 在对应的机器码中包含转移的位移, 而不是目的地址, 对IP的修改范围为: -128 ~ 127 指令格式: jcxz 标号(如果(cx) = 0 ,转移到标号处执行) 1 ;利用jcxz指令,现实在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中. 2 assume cs:codesg 3 codesg segment 4 start: mov ax,2000H 5 mov ds,ax 6 mov bx,0 7 s: mov cl,[... 阅读全文
posted @ 2014-03-04 11:21 galoishelley 阅读(3090) 评论(0) 推荐(1)
摘要:1- 以8位数据为例,无符号数编码的范围 0000 0000b-1111 1111b 0-255 255 = 2^8 -12- 有符号数编码 用8位数据的最高位表示符号位,0表示整, 1表示负 0000 0000 0 0000 0001 1 0000 0010 2 0111 1111 127 1000 0000 ? 1000 0001 -1 1000 0010 -2 1111 1111 -127 可见表示数的范围 -127 -- 1271000 0000 ? 无法表示 考虑用反码 0000 0000 0 1111 1111 ? 0000 0001 1 1... 阅读全文
posted @ 2014-03-01 10:29 galoishelley 阅读(871) 评论(0) 推荐(0)
摘要:1- jmp为无条件转移指令,可以只修改IP, 也可以同时修改CS和IPjmp指令要给出两种信息:(1) 转移的目的地址(2) 转移的距离(段间转移, 段内转移, 段内近转移)2- 依据位移进行转移的jmp指令jmp short 标号(转到表号处执行指令) ;段内短转移 -128-1271 assume cs:codesg2 codesg segment3 start: mov ax,04 jmp short s5 add ax,16 s:inc ax7 codesg ends8 end start执行后 ax 0001H2- 根据位移进行转移的原理1 ... 阅读全文
posted @ 2014-02-28 16:52 galoishelley 阅读(2315) 评论(0) 推荐(0)
摘要:1- div除法指令(1) 除数: 有8位和16位两种,在一个寄存器或内存单元中.(2) 被除数: 默认放在AX和DX或AX中 除数为8位, 被除数为16位, 默认在AX中存放. 除数为16位, 被除数为32位, 在DX或AX中存放. AX存放低16位,DX存放高16位.(3) 结果 除数为8位, 则AL存储除法操作的商, AH存放余数 除数为16为, 则AX存储除法操作的商, DX存放余数2- 格式如下 div reg div 内存单元 div byte ptr ds:[0] 含义为:(al) = (ax)/((ds)*16+0)的商 (ah) = (ax)/((ds... 阅读全文
posted @ 2014-02-27 16:14 galoishelley 阅读(5841) 评论(0) 推荐(1)
摘要:1- 定义描述性符号:reg(表示一个寄存器)和sreg(表示一个段寄存器) reg的集合包括: ax, bx, cx, dx, ah, al, bh, bl, ch, cl, dh, dl, sp, bp, si, di; sreg的集合包括:ds, ss, cs, es2- bx, si, di, bp(1) 在8086CPU中, 只有这4个寄存器可以用在[...]中来进行内存单元寻址. mov ax,[bp] mov ax,[bp + si] mov ax,[bp + di] 错误的指令 mov ax,[ax] mov ax,[cx] mov ax,[dx] mov ... 阅读全文
posted @ 2014-02-27 13:02 galoishelley 阅读(357) 评论(0) 推荐(0)
摘要:[idata] 用一个常量来表示地址[bx] 用一个变量表示地址[bx+idata] 用一个变量和常量表示地址[bx+si] 用两个变量表示地址[bx+si+idata] 用两个变量和一个常量表示地址 1 ;将datasg段中每个单词的头一个字母改为大写字母 2 assume cs:codesg,ds:datasg 3 datasg segment 4 db '1. file ' 5 db '2. edit ' 6 db '3. search ' 7 db '4. view ' 8 db '5.... 阅读全文
posted @ 2014-02-27 10:17 galoishelley 阅读(563) 评论(0) 推荐(0)
摘要:1- SI和DI是8086CPU中和bx功能相近的寄存器, SI和DI不能够分成两个8位寄存器来使用, 下面的三组指令实现了相同的功能:(1) mov bx,0 mov ax,[bx](2) mov si,0 mov ax,[si](3) mov di,0 mov ax,[di]或者(1) mov bx,0 mov ax,[bx + 123](2) mov si,0 mov ax,[si + 123](3) mov di,0 mov ax,[di + 123]方法一: 1 ;用寄存器SI和DI实现将字符串'welcome to masm!'复制到它后面的数据区中. 2 assu 阅读全文
posted @ 2014-02-25 16:50 galoishelley 阅读(2125) 评论(0) 推荐(0)
摘要:1-or, and 指令 mov al,01100011B and al,00111011B 执行后al=00100011B mov al,01100011B or al,00111011B 执行后al=01111011B2- 关于ASCII码 世界上有很多编码方案,有一种方案叫做ASCII编码.所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象.比如在ASCII编码方案中,用61H表示"a", 62H表示"b", 一种规则需要人们遵守才有意义.3- 一个文本编辑过程中.就包含着按照ASCII编码规则进行的编码和解码. 在文本编辑器中,我们 阅读全文
posted @ 2014-02-25 10:45 galoishelley 阅读(503) 评论(0) 推荐(0)
摘要:偏移地址的寻址范围受段地址限制0:00000:00011:0段地址+1与之前,中间有FFFF个数0100:00100:10101段地址+1与之前,中间有F个数所以偏移地址的寻址范围为:0-FFFF 阅读全文
posted @ 2014-02-12 15:01 galoishelley 阅读(351) 评论(0) 推荐(0)
摘要:1 assume cs:code,ds:data,ss:stack 2 data segment 3 dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H 4 data ends 5 stack segment 6 dw 0,0,0,0,0,0,0,0 7 stack ends 8 code segment 9 start: mov ax,stack10 mov ss,ax11 mov sp,16 ;将设置栈顶ss:sp指向stack:1612 13... 阅读全文
posted @ 2014-02-12 14:52 galoishelley 阅读(641) 评论(0) 推荐(0)
摘要:1- 程序取得所需空间的方法有两种,一是加载程序的时候为程序分配,再就是程序在执行的过程中向系统申请.2-在代码段中使用数据编程计算以下8个数的和,结果存在ax寄存器中. 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H 1 assume cs:code 2 code segment 3 dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H ;dw [define word]定义字符型数据 4 mov bx,0 5 mov ax,0 6 mov cx,8 7 ... 阅读全文
posted @ 2014-02-12 10:35 galoishelley 阅读(639) 评论(0) 推荐(0)
摘要:1- 段前缀 mov ax,ds:[bx] mov ax,cs:[bx] mov ax,ss:[bx] mov ax,es:[bx] mov ax,ss:[0] mov ax,cs:[0]这些出现在访问内存单元的指令中,用于显式的指明内存单元的段地址的"ds,cs,ss,es"在汇编语言中称为段前缀2- 一段安全的空间在8086模式中,随意向一段内存空间写入内容是很危险的,因为这段内存空间可能存放着重要的代码或数据. 1 assume cs:code 2 code segment 3 mov ax,0 4 mov ds,ax 5 mov ds:[26H],a... 阅读全文
posted @ 2014-02-11 11:50 galoishelley 阅读(891) 评论(0) 推荐(0)
摘要:masm5.0编辑器,汇编语言注释(1) 单行注释用;,注释行之前使用英文状态下的分号; mov al,ds:[6] ;内存ds:[6]的内容送入al中 (2) 批量,多行注释 comment * * comment 成对出现 1 assume cs:code 2 code segment 3 mov ax,0ffffH 4 mov ds,ax 5 mov bx,0 6 7 mov dx,0 8 9 comment *10 mov cx,1211 s:mov al,[bx]12 mov ah,01... 阅读全文
posted @ 2014-02-11 11:14 galoishelley 阅读(2555) 评论(0) 推荐(0)
摘要:ffff:0-ffff:d内存中数值求和放入dx寄存器中代码:add.asm 1 assume cs:code 2 code segment 3 mov ax,0ffffH 4 mov ds,ax 5 6 mov dx,0 7 8 mov al,ds:[0] 9 mov ah,010 add dx,ax11 12 mov al,ds:[1]13 mov ah,014 add dx,ax15 16 mov al,ds:[2]17 mov ah,018 add dx,... 阅读全文
posted @ 2014-02-11 10:51 galoishelley 阅读(1429) 评论(0) 推荐(0)
摘要:1- [bx]和内存单元的描述 [0]表示内存单元, 他的偏移地址为0 mov ax,[0] 将一个内存单元的内容送入到ax.这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为0,段地址在ds中. mov al,[0] 将一个内存单元的内容送入到al,这个内存单元的长度为1字节(字节单元),存放一个字节,偏移地址为0,段地址在ds中. 完整的描述一个内存单元,需要两种信息:(1)内存单元地址(2)内存单元的长度(类型) mov ax,[bx] 将一个内存单元的内容送入到ax, 这个内存单元的长度为2字节(字单元),存放一个字,偏移地址在bx中,段地址在ds中. mov al... 阅读全文
posted @ 2014-02-10 16:17 galoishelley 阅读(953) 评论(0) 推荐(0)
摘要:mov 寄存器, 数据mov ax,8mov 寄存器, 寄存器 mov ax,bxmov 寄存器, 内存单元 mov ax,[0]mov 内存单元,寄存器 mov [0],axmov 段寄存器,寄存器 mov ds,axmov ax,10 //ax = 10add ax, bx //... 阅读全文
posted @ 2014-01-21 14:56 galoishelley 阅读(242) 评论(0) 推荐(0)
摘要:操作系统的外壳操作系统是由多个功能模块组成的庞大,复杂的软件系统.任何通用的操作系统,都要提供一个称为shell(外壳)的程序,用户(操作员)使用这个程序来操作计算机系统进行工作.DOS中有一个程序command.com,这个程序在DOS中称为命令解释器,也就是DOS系统的shell启动DOS时,先完成其他重要的初始化工作,然后运行command.com,command.com运行后,执行完其他得相关任务后,在屏幕显示由当前盘符和当前路径组成的提示符,比如"c:/',然后等待用户输入用户要执行一个程序,则输入该程序的可执行文件的名称,command首先根据文件名找到可执行文件 阅读全文
posted @ 2014-01-21 14:40 galoishelley 阅读(438) 评论(0) 推荐(0)
摘要:1 assume cs:codesg //假设 cs指向 codesg段 伪指令 2 3 codesg segment //定义一个段,段名为codesg ,这个段从此开始 伪指令 4 5 start: mov ax,0123H 6 7 mov bx,0456H 8 9 add ax,bx10 11 add ax,ax12 13 mov ax,4c00H14 15 int 21H16 17 codesg ends //名称为codesg的段到此结束18 19 end ... 阅读全文
posted @ 2014-01-21 14:26 galoishelley 阅读(182) 评论(0) 推荐(0)