汇编基础知识五

0x01 and 和 or 指令

and 逻辑"与"运算,按位运算都一为一

例:

mov al,01100011B
and al,00111011B
执行后
al=00100011B

or 逻辑"或"运算,有一为一

例:

mov al,01100011B
or al,00111011B
执行后
al=01111011B

0x02 字符串形式

汇编中的字符串有两种字符串形式

  1. 用引号方式包围的字符串

    mov al,'hello world
  2. 用ASCII码输入字符串

    mov al,'61H,64H,66H'

汇编主要是用ASCII码运算字符串包括的字符串编译器会帮助计算机转换成ASCII码

[bx+idata]

[bx+idata]表示一个内存单元,他的偏移地址是:(bx)+idata(bx中的值加上idata)

mov ax,[bx+200]
将一个内存单元的内容写入ax,这个内存单元的长度为2个字节(字单元),存放一个字,偏移地址为bx的数值加上200,段地址在ds中

它还有以下格式

mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200

简单来说[bx+idata]就是他的偏移地址bx+idata指向的地址

[bx+idata]进行数组数据处理

例 把字符串转化大小写

假如有一个代码段
datasg segment
    db 'hello'
    db 'world'
datasg ends
我们可以这么获取字符串
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,5
s:  mov al,[bx] ;第一个字符串
    and al,11011111b
    mov [bx],al
    mov ah,[bx+5]   ;第二个字符串
    inc bx
    loop s

C描述就是

char a[5]='hello';
char b[5]='world';

main()
{
    int i;
    i=0;
    do
    {
        a[i]=a[i]&0xDF;
        b[i]=b[i]|0x20;
        i++;
    }
    while(i<5);
}

0x03 SI和DI

si和di是8086CPU中bx功能相近的寄存器,si和di不能分成两个8位寄存器来使用

mov bx,0
mov ax,[bx]

mov si,0
mov ax,[si]

mov di,0
mov ax,[do]

0x04 总结 一

常见的指向内存单元的还有

mov ax,[bx+si]
mov ax,[bx][si]
mov ax,[bx+si+idata]

常见内存地址表示格式
[idata] 用一个常量来表示地址
[bx+idata] 用一个变量+常量表示地址
[bx+si] 用两个变量表示地址
[bx+si+idata] 两个变量+一个常量表示地址

一般来说暂存的数据我们都可以在栈地址中查找

0x05 数据处理的两个基本问题

现在这里申明两个符号

  1. reg 用来表示寄存器

    ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si

  2. sreg 用来表示段寄存器

    ds,ss,cs,es

1.处理的数据在什么地方?

  • 机器指令处理的数据在何方

绝大部分机器指令都是进行数据处理的指令,大致分为读取,写入,运算。

在指令层面并不会关心数据的值是多少,而关心它执行前的位置

所要处理的数据在三个地方:CPU内部,内存,端口

机器码 汇编指令 指令执行前数据的位置
8E1E0000 mov bx[0] 内存, ds:0单元
90C3 mov bx,ax CPU内部, ax寄存器
BB0100 mov bx,1 CPU内部,指令缓冲器
  • 汇编中数据地址的表达方式
  1. 立即数
  2. 寄存器
  3. 段地址:偏移地址
  • 寻址方式

2.要处理的数据有多长?

8086CPU的指令,可以处理两种尺寸的数据,byte和word.所以在机器指令中要指明,指令进行的是字操作还是字节操作。

汇编用一下方法处理

1)通过寄存器名指明要处理的数据的尺寸

例如寄存器中的al和ax
通过ax操作的都是字

通过al操作的都是字节

2)在没有寄存器的情况下,用操作符X ptr指明内存单元的长度,X在汇编中的指令可以为word或Byte

例如

下面的指令中,用word ptr指明了访问的内存单元是一个字单元

mov word ptr ds:[0],1

下面的指令中,用byte ptr指明了访问的内存单元是一个字单元

mov byte ptr ds:[0],1

在没有寄存器参与的内存单元访问指令中,用word ptr或byte ptr显性的指明所要访问的内存单元的长度是很有必要的,否者CPU无法得知要访问的单元是字还是字节单元

在修改的时候就会很明显的

mov ax,2000H
mov ds,ax
mov byte ptr [1000H],1

他就将内存的内容变为

2000:1000 01 FF FF FF FF

mov ax,2000H
mov ds,ax
mov word ptr [1000H],1

2000:1000 01 00 FF FF FF

0x06 div

div 是触发指令,使用div做除法的时候应注意

  1. 除数:有8位和16位两种,在一个reg或内存单元中
  2. 被除数:默认放在AX或DX中如果是8为被除数就是16位默认在AX中存放,如果是除数是16位,被除数则为32位,默认在DX和AX两个中存放,DX存放高16位,AX存放低16位
  3. 结果:如果除数为8位,则AL存储除法操作的商,AH存储除法草坪做的余数;如果除数为16位,则AX存储除法操作商,DX存储除法操作的余数。

格式如下

div reg
div 内存单元

例子

div byte ptr ds:[0]

含义:

(al)=(ax)/((ds)*16+0)的商
(ah)=(ax)/((ds)*16+0)的余数
div word ptr [bx+si+8]
div byte ptr [bx+si+8]
div word ptr es:[0]

0x07 伪指令dd

db和dw是用于定义字节型和字形数据

dd是用来定义dword 双字型数据的例如

data segment
    db 1
    dw 1
    dd 1
data ends

在data段定义了3个数据:

第一个数据为01H,在data:0处,占1个字节

第二个数据为0001H,在dat:1处,占一个字

第三个数据为00000001H,在data:3,占2个字

0x08 dup

dup它是和db,dw,dd等数据定义伪指令配合使用的,用来进行数据的重复

db 3 dup (0)
db 3 dup(0,1,2)

定义了3个字节,它们的值都是0 相当于 db 0,0,0

定义了9个字节,他们是0,1,2,0,1,2,0,1,2

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,417评论 0 1
  • 汇编语言的一些注意点 汇编语言是直接在硬件之上工作的编程语言。 CPU(Central Processing Un...
    BackSpace8阅读 1,779评论 0 1
  • 一、基础知识 mov ax,bx把BX内容送到AX中。汇编语言有3类指令,汇编指令、伪指令,其他符号。CPU通过地...
    赤果_b4a7阅读 1,844评论 0 1
  • 本章对前面的所有内容是具有总结性的;我们知道,计算机是进行数据处理、运算的机器,那么有两个基本的问题就包含在其中:...
    一川烟草i蓑衣阅读 625评论 0 0
  • 段的综述 对于数据段,将它的段地址放在DS中,用mov、ADD、sub等访问内 存单元的指令时...
    古夜鹏红阅读 1,231评论 0 1