汇编语言07——数据处理的两个基本问题
发布时间:2020-12-14 03:04:38 所属栏目:大数据 来源:网络整理
导读:整理自fishcc论坛 数据处理的两个基本问题 两个基本问题: 处理的数据放在什么地方 要处理的数据有多长 定义描述性符号: reg 寄存器 sreg 段寄存器 目前已经学过的reg的集合: ax,bx,cx,dx,sp,dp,si,di sreg的集合: ds,ss,cs,es 开始解决问题1:处理的数据放在
整理自fishcc论坛 数据处理的两个基本问题 两个基本问题: 处理的数据放在什么地方要处理的数据有多长 定义描述性符号: reg 寄存器 sreg 段寄存器 目前已经学过的reg的集合: ax,bx,cx,dx,sp,dp,si,di sreg的集合: ds,ss,cs,es 开始解决问题1:处理的数据放在什么地方 在8086CPU中,只有四个寄存器(bx,bp,di)可以用在[...]中进行内存寻址 并且,这四个寄存器只能以四种组合出现: bx & si bx & di bp & si bp & di 比如,错误的用法:[bx + bp] 只要在[...]中使用bp,且没有显式指定段地址,段地址默认在ss中 比如: mov ax,[bp + si + idata] 含义:(ax) = ((ss) * 16 + (bp) + (si) + idata) (bp可以减轻sp的负担...) 汇编语言中用三个概念来表示数据的位置 1,立即数(idata) mov ax,1 2,寄存器 mov ax,bx 3,段地址(sa)和偏移地址(ea) mov ax,[bx + si + 8] mov ax,es:[bx] 下面处理第二个问题:要处理的数据有多长 方法1:通过寄存器指明:例如 mov ax,1 mov al,1 方法2:用word ptr指明要访问内存单元是一个字单元 mov word ptr ds:[0],1 inc word ptr [bx] 用byte ptr显性指明要访问的内存是一个字节单元 补充:push指令只进行字操作 div指令: div是除法指令 要求:除数为8位或者16位 被除数(默认)放在ax或(ax和dx)中 当除数为8位时,要求被除数为16位(ax) 当除数为16位时,要求被除数为32位(dx + ax) 当结果为8位,商存在al中,余数在ah中 当结果为16位,商存在ax中,余数在dx中 div指令的格式 div reg div 内存单元 例如: div byte ptr ds:[0] 含义:(al) = (ax) / ((ds) * 16 + 0)的商 (ah) = (ax) / ((ds) * 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)的余数 例: 计算100001/100 100001十六进制对应186A1H 程序如下: mov dx,1 mov ax,86A1 mov bx,100 div bx 伪指令dd db定义字节型数据 dw定义字型数据 dd定义dword(双字,32位) 操作符dup 与db,dw,dd配合使用,用来进行数据的重复 例如:db 3 dup (0) 定义了3个字节,都是0 等价于db 0,0 db 3 dup (1,2,3) 等价于1,3,1,3 dup使用格式: db 重复次数 重复内容 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |