个人网站备案介绍,合肥网页设计公司,宝塔和wordpress,wordpress会员卡汇编
1. debug指令
-R命令(register)
查看、改变CPU寄存器的内容
r ax 修改AX中的内容
-D命令(display)
查看内存中的内容
-E命令(enter)
改写内存中的内容
-U命令(unassenble反汇编)
将内存中的机器指令翻译成汇编指令
-T命令(trace跟踪)
执行一条机器指令
-A命令…汇编
1. debug指令
-R命令(register)
查看、改变CPU寄存器的内容
r ax 修改AX中的内容
-D命令(display)
查看内存中的内容
-E命令(enter)
改写内存中的内容
-U命令(unassenble反汇编)
将内存中的机器指令翻译成汇编指令
-T命令(trace跟踪)
执行一条机器指令
-A命令(assenble汇编)
以汇编指令的格式在内存中写入一条机器指令 2. mov、add、sub指令
1.mov传送
格式mov ax, bx
注意 1. 目标操作数与源操作数不能同时为内存操作数
2. 不能直接将立即数传送给段寄存器
3. CX不能以一切形式传送
4. 两个操作数类型必须一致 字节、字、双字 2.add
格式add ax, bx
若两数相加结果超过寄存器位数舍弃超出的高位
eg1溢出cx F06F
add cx, cx 原 F06F F06F 1E0DE
cx E0DE 最高位的 1 被舍去
eg2高位 BX F037
add bh 37 原 F0 37 127
BX 2737
eg3低位 CX E0DE
add cl, B6 原DE B6 194
CX E094 低位计算也不会进位
3.sub
格式 sub op1,op2 ;意为op1op1-op2
若两数相减被减数小于减数则被减数从最高位的上一位借1
eg1 BX 1303
sub bx, F
BX 12F4
eg2借位: BX 000F
sub bx, 10 原1000F - 10 FFFF
BX FFFF 从高位借1
eg3 BX 0000
sub bl, E 原100 - E 00F2
BX 00F2 从目标操作数的高位借1
3.mul、div、and、or指令
1. mul乘法
1两个相乘数要么都是8位要么都是16位。 若是8位一个默认放 AL 中另一个放在 8位reg 或 内存单元 若是16位 一个默认放在 AX 中 另一个放在 16位reg 或 内存单元
2结果如果是8位乘法结果默认放在 AX
如果是16位乘法结果 高位 默认放在 DX , 低位 默认放在 AX 中
格式mul reg
mul 内存单元
注意溢出同加法
2. div除法
1除数8位 或 16位在一个reg 或内存单元中
2被除数默认放在 AX 或 DX 和 AX 中
如果除数为8位被除数则为16位默认放在 AX 中
如果除数为16位被除数则为32位 放在在 DX 和 AX 中DX放高16位AX放低16位
3结果 如果除数为8位 则商放在 AL余数放在 AH
如果除数为16位则商放在 AX余数放在 DX
格式 div reg
div 内存单元
除数8位AX / BL AL...AH
除数16位DXAX / BX AX...DX
eg132位被除数DX F , AX 4240, BX 2710
mov dx, F F4240 1000000 2710 10000 64 100
mov ax, 4240 原F4240 / 2710 64
mov bx, 2710
div bx
AX 64 通过高16位DX, 低16位AX组成一个32位的被除数商放在AX
eg2有余数 DX F, AX 4241, BX 2710
mov dx, F F4241 1000001
mov ax, 4241 原F4241 / 2710 64...1
mov bx, 2710 1000001 / 10000 100...1
div bx
AX 64, DX 0001
3. and与
逻辑与指令按位进行与运算
mov al, 63
and al, 3B
结果al 23
注意该指令可将操作对象的相应位设为0其他位不变
将al的第0位设为0的指令为and al, FE(11111110B)
4. or 或
逻辑或运算按位进行或运算
mov al, 63
or al, 3B
结果al 7B
注意该指令可将操作对象的相应位设为1其他位不变
将al的第0位设为1的指令为or al, 1(00000001B) 4.shl、shr、inc、dec、xchg
1.shl 左移
shift left
1.将寄存器或内存单元中的数据向左移位
2.将最后移出的一位写入CF进位标志中
3.最低位用0补充
格式mov al, 48 ;(01001000)
shl al, 1 ;将al中的数据都左移一位
结果 al 90(10010000), CF 0
2.shr右移
shift right
同shl
3.inc加一
值加一不影响CF
4.dec减一 5.nop空
空指令先占位
6.xchg交换
交互两操作数的值
格式xchg ax, bx
7.neg求补
运算法一用零减去操作数然后结果返回操作数
运算法二将操作数按位取反后加1
8.退出
格式mov ax, 4c00H
int 21H
安全退出程序 5.寄存器
AX累加寄存器 OF溢出标志超过机器所能表示的有符号数范围
BX基址寄存器 ZF零标志运算结果为0ZF1
CX计数寄存器 CF进位标志
DX数据寄存器 AF辅助进位标志第3位向第4位进位时位1否则为0
SP堆栈指针寄存器 PF奇偶标志计算结果为1个数为偶则为1否则为0
BP基址指针寄存器 DF方向标志串处理DF1时每次操作后SI和DI减小DF0时增大
SI源变址寄存器 SF符号标志运算结果为负时SF1
DI目的变址寄存器 IF中断标志IF1允许CPU响应可屏蔽中断否则关闭中断
CS代码段寄存器 TF陷阱标志用于调试单步操作
DS数据段寄存器
SS堆栈段寄存器
ES附加段寄存器 5.CS:ip代码段寄存器、jmp
CS:IP指示了CPU当前要读取指令的地址
CS 为代码段寄存器IP 为指令指针寄存器
jmp
功能用寄存器中的值修改IP
格式jmp ax ;等同于mov IP, ax 等同但不可以这样用 修改IP
jmp ax:bx ;等同于mov CS, ax mov IP, bx 修改CS:IP 6.ss:sp寄存器、栈的push、pop指令
栈底是高地址
1.push
push指令的完成需要以下两个步骤 SP SP - 2因为SS:SP指向前栈顶既然需要push 数据自然需要获取新栈顶 将 push 后面跟的寄存器中的内容写入刚开辟出的内存中此时的SS:SP指向新栈顶
入栈时栈顶从高地址向低地址增长
2.pop
pop指令的完成需要以下两个步骤 将栈顶元素送入pop后面跟的寄存器中 SP SP 2SS:SP指向下一个元素
出栈时栈顶从低地址向高地址增长 ss:sp 指向栈顶元素 7.bp,si、di变址寄存器
1. SI 、DI是变址寄存器
SI 与 DI 是功能与 bx相近的寄存器不能分成8位寄存器来使用但是可以直接作为偏移地址有效地址
[BXSI] 与 [BXDI] 可亦作为偏移地址但是不可加ax、cx、dx这些寄存器
2. BP寄存器
BP默认的段寄存器是SSbx默认的段寄存器是DS 8.cmp、adc、sbb、
1. adc进位加法
adc 是带进位加法指令利用 CF 位上记录的进位值
格式adc 操作数1, 操作数2
功能操作数1 操作数1操作数2 CF
常用于32位、48位数的相加可实现进位
2. sbb借位减法
sbb 是带借位减法指令利用 CF 位上记录的借位值
格式sbb 操作数1, 操作数2
功能操作数1 操作数1- 操作数2 - CF
利用sbb指令可以对任意大的数据进行减法运算
3. cmp比较
cmp是比较指令功能相当于减法指令只是不保存结果但是影响标志寄存器
格式cmp 操作数1, 操作数2
功能计算 操作数1 - 操作数2 但不保存结果仅改变标志寄存器 9.源程序
assume cs:codesg
codesg segment
mov ax, 0123Hadd bx, 0456Hadd ax,bxadd ax,axmov ax,4c00Hint 21H
codesg ends
end
10.Loop指令
格式loop 标号
CPU执行loop指令的时候要进行两步操作 (cx) (cx) - 1 判断 cx 中的值不为零则转至标号处执行程序如果为零则向下执行
用loop指令实现循环功能cx中存放循环次数
assume cs:codesg
codesg segmentmov ax, 2mov cx, 11 ;循环11次输入多少就循环多少次s: add ax, axloop s
int 21H
codesg ends
end
如果 cx 0loop指令会陷入死循环
因为Loop指令会先减一即cx 0 - 1 FFFF需要在运行65535次
#includestdio.h
int x 0;
int sum 0;
for (int i 1; i 100; i) {x;sum x;
}
return sum;
上述C语言转换为汇编语言
assume cs:codesg
codesg segmentmov ax, 0mov bx, 0mov cx, 100s: inc axadd bx, axloop s
int 21H
codesg ends
end 11.ret、call指令
call func()
ret return
assume cs:codesg
codesg segmentmov ax, 2mov cx, 11call s ;调用函数sint 21H ;若不退出会执行下一指令陷入死循环s: add ax, axloop sret ; 封装函数s等于return
codesg ends
end
1. ret 和 retf
ret 指令用栈中的数据修改 IP实现近转移
执行后进行操作
1 IP SS * 16 SP
2 SP SP 2
等同于 pop IP
retf指令用栈中的数据修改 CS 和 IP 实现远转移
1 IP SS * 16 SP
2 SP SP 2
3 CS SS * 16 SP
4SP SP 2
等同于 pop IP
pop CS
2.call
格式 call 标号
执行后进行操作
1将当前的 IP 或 CS 和 IP 压入栈中
2转移
3.call far ptr
格式call far ptr 标号
实现段间转移 12.代码段、数据段、栈段、dup
16进制不能以字母开头
1.在代码段使用数据
assume cs:codesg
codesg segmentdw 123H, 456H, 789H, ABCHstart: mov ax, 3mov cx, 11call sinc bxint 21H
s: add ax,axloop s
codesg ends
end start
start 相当于事先把ip跳到第一行代码的有效地址上避免了定义的数据与执行代码之间的混乱
2.数据、代码、栈放入不同的段
assume cs:code,ds:data,ss:stack
data segmentdw 123H, 456H, 789H, ABCH
data ends
stack segmentdb 0, 0, 0, 0, 0, 0;等价于 6 dup(0) 即重复6个;dup hello world db 3 dup(abc, def)
stack ends
code segmentstart: mov ax, 3mov cx, 11call sinc bxint 21H
s: add ax,axloop s
code ends
end start
dup 的使用格式
db 重复次数 dup (重复的字节型数据)
dw 重复次数 dup (重复的字型数据)
dd 重复次数 dup (重复的双字型数据)
代码段、数据段、栈段的地址空间的连续的
每个段为避免冲突至少占用16个字节即段地址不同 13.offset、jmp
1.操作符offset
功能取得标号的偏移地址 2.jmp
jmp 为无条件转移指令可以只修改IP也可以同时修改CS和IP
1.jmp short 标号
实现段内短转移对IP修改范围为 -128~127
2.jmp far ptr 标号
实现段间转移或远转移修改CS:IP
3.jmp word ptr 内存单元地址段内地址
从内存单元地址处开始取一个字作为转移的目的偏移地址
4.jmp dword ptr 内存单元地址段间地址
从内存单元地址处开始取两个字高地址作为转移的段地址低地址作为转移的目的偏移地址 14.数组
定义字符串 db ”字符串“
1.arr 数组
assume cs:code,ds:data,ss:stack
data segmentarr dw 12,34 ;定义数组arr2 db hello world
data ends
stack segmentdb 10 dup(0)
stack ends
code segmentstart:mov ax, type arr ;type arr 可以查看数组的类型mov ax, type arr2 ;0001是字节0002是字
code ends
end start
2.数据标号
代码段内定义
assume cs:code,ds:data,ss:stack
data segment
data ends
stack segmentdb 10 dup(0)
stack ends
code segmentarr dw 12,34 ;定义数组arr2 db hello worldstart:mov ax, arr[2] ;可以通过下标访问数组下标增加1偏移地址增加1字节不与定义同步;arr[2] cs:[arr2] mov ax, word ptr arr[2] ;从cs:[arr2]处开始取一个字的内容放进axmov si, offset arr ;可以找到数组的有效/偏移地址
code ends
end start
其他段定义
assume cs:code,ds:data,ss:stack
data segmentarr db 10H,20H,30H,40H ;定义数组arr2 db hello world
data ends
stack segmentdb 10 dup(0)
stack ends
code segmentstart:mov ax, datamov ds, ax ;没有上面两行会找不到data设置ds指向data段;即 assume处的data与定义了数组的data不同步导致寻址不同而找不到定义的数组;默认访问单元的段地址在ds中而实际要访问的段为datamov ax, arr[2] ;等价于;mov si, offset arr;mov al, ds:[si2]mov ax, type arr2 ;
code ends
end start 15.实战1.0
输出hello world
assume cs:codesg,ds:data,ss:stack
data segmentstring db hello world,10,123,$ ;$表示终止符避免向内存后面继续;10是换行的ASCII的值实现换行功能。32--空格
data ends
stack segmentdb 10 dup(0)
stack ends
codesg segmentstart: mov ax, datamov ds, axmov dx, offset stringmov ah, 09Hint 21H
mov ah, 4CHint 21H
codesg ends
end start
大写转小写
ASSUME CS:CODE,DS:DATA,SS:STACK
DATA SEGMENTSTR DB HeLlo woRLd,$
DATA ENDS
STACK SEGMENTDB 10 DUP(0)
STACK ENDS
CODE SEGMENTSTART:MOV AX, DATAMOV DS, AXMOV BX, 0MOV CX, 11
S: MOV AL, [BX]CMP AL, AJB NEXTCMP AL, ZJA NEXTOR AL, 20HMOV [BX], ALNEXT: INC BXLOOP S;C语言;for(int i0;istrlen(str);i)if(大写)转小写
MOV DX, OFFSET STR;LEA DX, STRMOV AH, 09H ;9号功能参数入口为DXINT 21H
MOV AH, 4CHINT 21Hcode ends
end start
找最大值
ASSUME CS:CODE, DS:DATA, SS:STACK
DATA SEGMENTSTRING DB 10, 15, 22, 80, 50, 39,$MAX DB 0
DATA ENDS
STACK SEGMENTDB 10 DUP(0)
STACK ENDS
CODE SEGMENTSTART: MOV AX, DATAMOV DS, AXLEA BX, STRINGMOV CX, 5MOV AL, [BX]S: MOV AH, [BX1]CMP AL, AHJA CONTINUEMOV AL, AHCONTINUE:INC BXLOOP SMOV [MAX], ALMOV AH, 4CHINT 21H
CODE ENDS
END START
参考《汇编语言》速成指南(全程敲代码)_哔哩哔哩_bilibili 文章转载自: http://www.morning.wqsjx.cn.gov.cn.wqsjx.cn http://www.morning.qwqzk.cn.gov.cn.qwqzk.cn http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn http://www.morning.lyrgp.cn.gov.cn.lyrgp.cn http://www.morning.hkswt.cn.gov.cn.hkswt.cn http://www.morning.crdtx.cn.gov.cn.crdtx.cn http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.zfqr.cn.gov.cn.zfqr.cn http://www.morning.hnrqn.cn.gov.cn.hnrqn.cn http://www.morning.twhgn.cn.gov.cn.twhgn.cn http://www.morning.dybth.cn.gov.cn.dybth.cn http://www.morning.qlznd.cn.gov.cn.qlznd.cn http://www.morning.hcqpc.cn.gov.cn.hcqpc.cn http://www.morning.mnkhk.cn.gov.cn.mnkhk.cn http://www.morning.xbtlt.cn.gov.cn.xbtlt.cn http://www.morning.plydc.cn.gov.cn.plydc.cn http://www.morning.gnhsg.cn.gov.cn.gnhsg.cn http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.zqnmp.cn.gov.cn.zqnmp.cn http://www.morning.lfcnj.cn.gov.cn.lfcnj.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.pqppj.cn.gov.cn.pqppj.cn http://www.morning.wknjy.cn.gov.cn.wknjy.cn http://www.morning.tjkth.cn.gov.cn.tjkth.cn http://www.morning.wmyqw.com.gov.cn.wmyqw.com http://www.morning.qiyelm.com.gov.cn.qiyelm.com http://www.morning.rmxk.cn.gov.cn.rmxk.cn http://www.morning.shxmr.cn.gov.cn.shxmr.cn http://www.morning.jypsm.cn.gov.cn.jypsm.cn http://www.morning.brwnd.cn.gov.cn.brwnd.cn http://www.morning.xtqr.cn.gov.cn.xtqr.cn http://www.morning.kcyxs.cn.gov.cn.kcyxs.cn http://www.morning.dfndz.cn.gov.cn.dfndz.cn http://www.morning.nbrkt.cn.gov.cn.nbrkt.cn http://www.morning.gslz.com.cn.gov.cn.gslz.com.cn http://www.morning.lqlfj.cn.gov.cn.lqlfj.cn http://www.morning.junyaod.com.gov.cn.junyaod.com http://www.morning.bklkt.cn.gov.cn.bklkt.cn http://www.morning.fpyll.cn.gov.cn.fpyll.cn http://www.morning.lxjxl.cn.gov.cn.lxjxl.cn http://www.morning.ywzqk.cn.gov.cn.ywzqk.cn http://www.morning.kybjr.cn.gov.cn.kybjr.cn http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn http://www.morning.myfwb.cn.gov.cn.myfwb.cn http://www.morning.wqjpl.cn.gov.cn.wqjpl.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.btcgq.cn.gov.cn.btcgq.cn http://www.morning.gnmhy.cn.gov.cn.gnmhy.cn http://www.morning.bhznl.cn.gov.cn.bhznl.cn http://www.morning.yqndr.cn.gov.cn.yqndr.cn http://www.morning.zlgth.cn.gov.cn.zlgth.cn http://www.morning.wxfgg.cn.gov.cn.wxfgg.cn http://www.morning.czzpm.cn.gov.cn.czzpm.cn http://www.morning.wrbx.cn.gov.cn.wrbx.cn http://www.morning.yskhj.cn.gov.cn.yskhj.cn http://www.morning.zrfwz.cn.gov.cn.zrfwz.cn http://www.morning.bsxws.cn.gov.cn.bsxws.cn http://www.morning.zryf.cn.gov.cn.zryf.cn http://www.morning.dzrcj.cn.gov.cn.dzrcj.cn http://www.morning.lmrcq.cn.gov.cn.lmrcq.cn http://www.morning.jhgxh.cn.gov.cn.jhgxh.cn http://www.morning.cbvlus.cn.gov.cn.cbvlus.cn http://www.morning.gnzsd.cn.gov.cn.gnzsd.cn http://www.morning.pyxwn.cn.gov.cn.pyxwn.cn http://www.morning.leyuhh.com.gov.cn.leyuhh.com http://www.morning.zfrs.cn.gov.cn.zfrs.cn http://www.morning.hjlsll.com.gov.cn.hjlsll.com http://www.morning.pluimers.cn.gov.cn.pluimers.cn http://www.morning.kyzxh.cn.gov.cn.kyzxh.cn http://www.morning.wsxxq.cn.gov.cn.wsxxq.cn http://www.morning.sqhtg.cn.gov.cn.sqhtg.cn http://www.morning.rhqn.cn.gov.cn.rhqn.cn http://www.morning.blzrj.cn.gov.cn.blzrj.cn http://www.morning.krkwp.cn.gov.cn.krkwp.cn http://www.morning.qlznd.cn.gov.cn.qlznd.cn http://www.morning.guanszz.com.gov.cn.guanszz.com http://www.morning.bfgbz.cn.gov.cn.bfgbz.cn http://www.morning.rccpl.cn.gov.cn.rccpl.cn