博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编1
阅读量:7057 次
发布时间:2019-06-28

本文共 1937 字,大约阅读时间需要 6 分钟。

mov bx,1000H

mov ds,bx
mov al,[0]
以上三条语句目的是读取10000H单元的内容放到al中
ds寄存器通常用来村发给你要访问数据的段地址
[]中的数字表示内存单元的偏移地址
注意不能直接吧数据送入段寄存器中,例如ds等,所以这里先把数据送入bx,然后再把bx送入ds

mov 寄存器,数据

mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
移动第二个位置的数据到第一位
sub(减去) 和add(加上)跟mov差不多,其结果放在第一个的位置上

栈(LIFO后进先出,入栈是,栈顶从高地址想低地址方向增长):

push ax 将寄存器ax的内容送入栈中
pop ax 从栈顶取数据送入ax
栈顶的段地址放在SS中,偏移地址存放在SP中,任意时刻,ss:sp指向栈顶元素
注意栈顶超出栈空间问题,push会导致栈顶超界,pop也会
pop 段寄存器
push 段寄存器
pop 内存单元
push 内存单元

怎么设置数据段,代码段,栈段呢

数据段:把段地址放在ds中,偏移地址放在[]中
代码段:把段地址放在cs中,偏移地址放在ip中
栈段:把段地址放在ss,偏移地址房子啊sp中

inc bx 指bx中的内容加1,相当于c语言的自增

loop 该指令用来实现循环功能,循环次数放在cx中,执行一次命令后,cx减1,然后判断cx是否为0,不为0转至标号处继续循环,否则退出该循环向下执行

上个例子吧

[02:56:33] vi a.asm[02:56:46] nasm -g -f elf64 a.asm[02:56:56] ld -o a a.o[02:57:01] gdb aGNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-94.el7Copyright (C) 2013 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "x86_64-redhat-linux-gnu".For bug reporting instructions, please see:
...Reading symbols from /root/bp/asm/a...done.(gdb) l1 section .text2 global _start3 _start:4 mov eax,45 mov ebx,16 mov edx,17 mov ecx,108 s: add edx,edx9 loop s10 mov edx,0(gdb) 11 mov edx,2012 int 80H13 mov eax,1 ;用于退出程序的linux内核命令号,即系统调用14 mov ebx,0 ;程序返回码,改变这个数会改变echo $?的值15 int 80H ;用来唤醒内核(gdb) b 10Breakpoint 1 at 0x400098: file a.asm, line 10.(gdb) b 11Breakpoint 2 at 0x40009d: file a.asm, line 11.(gdb) rStarting program: /root/bp/asm/a Breakpoint 1, 0x0000000000400098 in s ()(gdb) print $eax$1 = 4(gdb) print $edx$2 = 1024(gdb)

我试过cx和ecx,结果都是正确的,注意是add edx,edx,所以结果才会这么大,懒得改成累加1到10了。bty,我还没搞清楚什么时候该用什么寄存器,所以就先随便用了,其它几个语句我也暂时不知道为什么要那么写

转载于:https://www.cnblogs.com/biaopei/p/7730649.html

你可能感兴趣的文章
json与String的转化
查看>>
linux上解压版安装jdk,tomcat
查看>>
科略教育—企业为什么始终处于竞争状态?
查看>>
iphone开发
查看>>
解决:在微信中访问app下载链接提示“已停止访问该网页”
查看>>
使用阿里云ECS自建RDS MySQL从库
查看>>
Linux下sed命令
查看>>
胃病犯了怎么办
查看>>
三星2610打印机故障INTERNAL ERROR - Incomplete Session by time out
查看>>
马哥2016全新Linux+Python高端运维班第五周作业
查看>>
thinkphp 跨模块调用配置文件信息
查看>>
nohup命令在后台自动执行程序
查看>>
MAVEN项目后 jar包无法发布到eclipse的web服务器
查看>>
选择结构与循环结构
查看>>
Linux系统生成随机密码的10种方法
查看>>
puppet初体验
查看>>
oracle安装前环境检查
查看>>
ansible出错
查看>>
linux内核中的信号机制--一个简单的例子
查看>>
【Java】File.createTempFile创建临时文件
查看>>