【笨鸟先飞 汇编挖坑】第七天

and 和or 命令

按位计算,举个例子

  • mov al,01100011B
    mov al,00111011B
    执行结果:al=00100011B
    对应位取 and 运算,有一个为 0 结果就是 0 ,
    简单说就是把对象中相应位的设为 0 ,其他位不变
  • mov al,01100011B
    or al,00111011B
    执行结果为:al=01111011B
    对应位取 or 运算,有一个为 1 结果就是 1 ,
    简单说就是把对象中相应位的设为 1 ,其他位不变

数据定义

前面提到,定义字型数据 dw,这里整理几种数据定义类型

  • db定义字节类型变量,一个字节数据占1个字节单元,
    读完一个,偏移量加1

  • dw定义字类型变量,一个字数据占2个字节单元,
    读完一个,偏移量加2

  • dd定义双字类型d量,一个双字数据占4个字节单元,
    读完一个,偏移量加4

都可以定义字符串,常用的db字节类型变量,原因有两点:

  • 非字型会涉及到多个字节单位,转存到内存会出现顺序颠倒的情况
assume cs:codesg
codesg segment
    dw '89','10'
    dd 'as','se'
codesg ends

end 

在这里插入图片描述
dw dd定义两字符串,图中第三列ascll码可见,“89”“10”“as”“se”都倒序

  • 第二原因是 dw dd在不同编译器规则格式不同

定位内存地址

两个寄存器 SI DI

具有可BX同等作用,配合DS使用寻址
不能分成两个八位寄存器使用

不同寻址方式
  • [adress]
  • [bx]
  • [bx+idata](或者 idata[bx] 类似于高级语言中的数组处理)
  • [bx+si],[bx+di]
  • [bx+si+idata],[bx+di+idata]

实例

将datasg段中每个单词改成大写

assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
   db 'ibm             '
   db 'dec             '
   db 'ass             '
   db 'emb             '
datasg ends

stacksg segment
   dw 0,0,0,0,0,0,0,0
stacksg ends                    ;栈道处理两次循环的CX

codesg segment
start:
   mov ax,stacksg
   mov ss,ax
   mov sp,16
   mov ax,datasg
   mov ds,ax
   mov bx,0                 ;bx控制列
   mov cx,4
s0:                      ;列循环
   push cx
   mov si,0                 ;si控制行
   mov cx,3

s:                           ;行循环
   mov al,[bx+si]
   and al,11011111B
   mov [bx+si],al
   inc si
   loop s
   
   add bx,16                    ;一行16字节
   pop cx
   loop s0

   mov ax,4c00H
   int 21H
   
codesg ends

end start
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值