技术标签: nasm
验证一下nasm编译后的JMP指令的跳转地址计算.
测试用例: 不同的跳转偏移, 不同的跳转方向
; /// @file boot_dispmsg/test_op_code_jmp.asm
; /// @brief 测试jmp命令的向上跳和向下跳的的目标地址计算
; /// @note 编译命令行
; /// cd D:\prj\nasm_prj\boot\boot_dispmsg
; /// d:
; /// C:\nasm\nasm.exe test_op_code_jmp.asm -o test_op_code_jmp.bin -l test_op_code_jmp.list
; /// @note 将 test_op_code_jmp.bin 写到U盘0扇区
bits 16 ; ///< 16位汇编
org 0x7c00
cli ; ///< 关中断
xor ax, ax
mov ds, ax ; ///< 使si的默认段寄存器为实模式当前段, 和代码段寄存器cs一样, 都是0
mov es, ax ; ///< 使di的默认段寄存器为实模式当前段, 和代码段寄存器cs一样, 都是0
mov ss, ax ; ///< 使sp的默认段寄存器为实模式当前段, 和代码段寄存器cs一样, 都是0
mov sp, 0x7c00
sti ; ///< 开中断
cld ; ///< 清方向标志, 使基于si,di的操作后, si++, di++
mov cx, 2 ; ///< 执行2次
case_test_jmp:
mov ax, 0
case_jmp_pt1:
mov ax, 1
jmp case_jmp_pt3 ; ///< 向下跳
mov ax, 0xff
case_jmp_pt2:
mov ax, 2
jmp case_jmp_default ; ///< 向下跳
mov ax, 0xff
mov ax, 0xff
case_jmp_pt3:
mov ax, 3
jmp case_jmp_pt2 ; ///< 向上跳
mov ax, 0xff
mov ax, 0xff
mov ax, 0xff
case_jmp_default:
mov ax, 10
mov ax, 0xff
jmp case_jmp_pt1 ; ///< 向上跳
loop case_test_jmp
str_prog_end:
db "MBR execute END", 0x0d, 0x0a, 0
; /// 显示字符串
fn_disp_str:
pusha
fn_disp_str_disp_one_char_from_si:
; int 0x10, ah = 0x0e
; - VIDEO - 写字符并移动光标 (TTY WRITE)
; AL = character, BH = display page (alpha modes)
; BL = foreground color (graphics modes)
lodsb ; ///< load byte to al from si, then si++
and al, al
jz fn_disp_str_end ; ///< 字符串是以0结尾的
mov ah, 0x0e
; /// 颜色值定义参考 http://blog.csdn.net/lostspeed/article/details/48469103
mov bx, 7 ; ///< 显示页为0, 前景色为白色
int 0x10
jmp fn_disp_str_disp_one_char_from_si
fn_disp_str_end:
popa
ret
jmp $
Next at t=0
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b ; ea5be000f0
<bochs:1> pb 0x7c00
<bochs:2> c
(0) Breakpoint 1, 0x0000000000007c00 in ?? ()
...
<bochs:6> s
Next at t=156816104
(0) [0x000000007c07] 0000:7c07 (unk. ctxt): mov ss, ax ; 8ed0
<bochs:7> u 0x7c00 0x7c40
00007c00: ( ): cli ; fa
00007c01: ( ): xor ax, ax ; 31c0
00007c03: ( ): mov ds, ax ; 8ed8
00007c05: ( ): mov es, ax ; 8ec0
00007c07: ( ): mov ss, ax ; 8ed0
00007c09: ( ): mov sp, 0x7c00 ; bc007c
00007c0c: ( ): sti ; fb
00007c0d: ( ): cld ; fc
00007c0e: ( ): mov cx, 0x0002 ; b90200
00007c11: ( ): mov ax, 0x0000 ; b80000
00007c14: ( ): mov ax, 0x0001 ; b80100
00007c17: ( ): jmp .+14 ; eb0e
00007c19: ( ): mov ax, 0x00ff ; b8ff00
00007c1c: ( ): mov ax, 0x0002 ; b80200
00007c1f: ( ): jmp .+20 ; eb14
00007c21: ( ): mov ax, 0x00ff ; b8ff00
00007c24: ( ): mov ax, 0x00ff ; b8ff00
00007c27: ( ): mov ax, 0x0003 ; b80300
00007c2a: ( ): jmp .-16 ; ebf0
00007c2c: ( ): mov ax, 0x00ff ; b8ff00
00007c2f: ( ): mov ax, 0x00ff ; b8ff00
00007c32: ( ): mov ax, 0x00ff ; b8ff00
00007c35: ( ): mov ax, 0x000a ; b80a00
00007c38: ( ): mov ax, 0x00ff ; b8ff00
00007c3b: ( ): jmp .-41 ; ebd7
00007c3d: ( ): loop .-46 ; e2d2
00007c3f: ( ): dec bp ; 4d
<bochs:8> u
00007c07: ( ): mov ss, ax ; 8ed0
<bochs:9> s
Next at t=156816105
(0) [0x000000007c09] 0000:7c09 (unk. ctxt): mov sp, 0x7c00 ; bc007c
...
/// @note 指令字节数和JMP相对偏移值,都是用十进制表示的, 指令地址是用16进制表示的
(0) [0x000000007c17] 0000:7c17 (unk. ctxt): jmp .+14 (0x00007c27) ; eb0e ; ///< 0x7c17 + 2(本指令[eb0e]字节数为2) + 14 = 0x7c27
...
(0) [0x000000007c2a] 0000:7c2a (unk. ctxt): jmp .-16 (0x00007c1c) ; ebf0 ; ///< 0x7c2a + 2(本指令[ebf0]字节数为2) - 16 = 0x7c1c
...
(0) [0x000000007c1f] 0000:7c1f (unk. ctxt): jmp .+20 (0x00007c35) ; eb14 ; ///< 0x7c1f + 2(本指令[eb14]字节数为2) + 20 = 0x7c35
...
(0) [0x000000007c3b] 0000:7c3b (unk. ctxt): jmp .-41 (0x00007c14) ; ebd7 ; ///< 0x7c3b + 2(本指令[ebd7]字节数为2) - 41 = 0x7c14
...
<bochs:27> q
文章浏览阅读241次。一、简介在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config 。Spring Cloud Config就是我们通常意义上的配置中心。Spring Cloud Config-把应用原本放在本地文件的配置抽取出来放在中心服务器,本质是配置信息从本地迁移到云端。..._本地运行config-prod.properties
文章浏览阅读268次,点赞2次,收藏6次。首先先问大家一个问题:在磁盘上建一个空文件,这个文件会占据磁盘的储存空间吗?实践出真知,我们发现新建一个文本文档,它的大小是0kB,这时有小伙伴就会认为既然它的大小是0KB,那么它当然也就不会占用磁盘空间咯。然而真的是这样吗?我们打开这个文件的属性来一探究竟:我们发现系统不仅记录了这个空文件的大小,同时还有它的文件名、文件类型、所在位置、创建时间等信息,难道这些信息不要占用系统空间吗,当然要!一个空文件同样会占用系统空间文件 = 文件内容 + 属性路径的本质就是这颗多叉树的搜索路径。_linux 展示
文章浏览阅读140次,点赞10次,收藏3次。问题二:非旺玖原装PL2303,请联系供货商或PL2303TA不支持WINDOWS11及后续版本问题。进设备管理器,找到端口COM,有问题会提示“非旺玖原装的PL2303,请联系您的供货商”。更多内容可以B站搜索迅为RK3588开发板;2.4.2 驱动问题。_windows 调试串口
文章浏览阅读7.7k次。Python输出整数的方法:先使用str()函数将数字转换成字符串赋值给变量i,再用“if i.count('.') == 0”语句判断字符串中是否没有小数点,如果是则输出这个字符串,这样输出的数字就都是整数了示例代码如下:x = [23.5, 45.6, 987, 698, 123, 654]for i in x:i = str(i)if i.count('.') == 0:print(I)执行..._python的print整数
文章浏览阅读146次。js中好用的工具方法复制内容到手机剪贴板:/** * 拷贝数据到剪贴板 */ public static CopyToClipBoard(str){ let copyDom = document.createElement("input"); // 获得需要复制的内容 copyDom.setAttribute("value",str); //不需要让他displaynone // copyDom._js 粘贴板时间
文章浏览阅读419次。记录一篇将图片等静态资源上传至vsftpd服务器的工具类package com.zhouym.baiwei.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.i..._vsftp下载工具类
文章浏览阅读267次,点赞6次,收藏4次。EDM邮件群发虽然看似简单,但其中蕴含的要素却十分丰富。AokSend,依托强大API/SMTP接口,实现EDM邮件高效群发。精准触达,一键发送,让您的营销信息迅速覆盖目标客户,提升品牌影响力!
文章浏览阅读235次。定义了两个对话框CDlgParent和CDlgChild,CDlgChild已设置Child属性,CDlgParent未重定义PreTranslateMessage函数,在CDlgChild的PreTranslateMessage函数中设断点,未运用原因: 对话框均在动态库中定义,且为使用共享MFC DLL的规则DLL,此方式无法响应PreTranslateMessage消息,但应用程序可不使..._mfc pretranslatemessage 不进入
文章浏览阅读722次,点赞10次,收藏19次。1)UFT即原来的QTP与ST合并而来,由HP公司开发,是一个企业级的商业自动化测试工具,提供了强大易用的录制回放功能,同时兼容对象识别模式与图像识别模式,支持B/S和C/S两种架构的软件测试;一款基于python语言编写的自动化测试框架工具,具备良好的扩展性,支持关键字驱动,支持多种类型的客户端和接口,可进行分布式测试;3)Selenium自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
文章浏览阅读1.4w次,点赞4次,收藏48次。1.基础介绍1.1 简述1.2 网桥配置命令及安装(CentOS系统)2. brctl和bridge命令建桥2.1 brctl命令说明及范式2.2 brctl场景使用2.3 bridge命令及范式3.ip命令建桥3.1 ip命令建桥说明4.桥的持久化1.基础介绍1.1 简述什么是网桥 网桥是一种在链路层实现中继,对帧进行转发的技术,根据MAC分区块,可隔离碰撞,将网络的多个网段在数据链路层连接起来的网络设备。它是Linux上用来做TCP/IP二层协议交._bridge命令
文章浏览阅读153次。孔子曰:学而不思则罔,思而不学则殆。废话不多说,直接上。浅谈兼容css相较于js html来说,兼容性问题最不是事,CSS在最初设计时,就有一个协议:如果不能识别选择器属性,那么就默认不处理,不报错。这个也是CSS得以发展的非常重要的特征。下面是各个浏览器私有前缀:IE -ms-Chrome -webkit-Firefox -moz-Safari -webkit-..._css 文字后仰
文章浏览阅读760次。一、操作系统的发展历程操作系统是用来=控制和管理系统资源、方便用户使用计算机的程序的集合,是人机交互的接口。大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理。1. 服务器专用的 UNIX 操作系统UNIX 操作系统与1969年由美国贝尔实验室肯·汤普森(K.Thompson)和丹尼斯·麦卡利斯泰尔·里奇(D.M.Ritchie)开发完成,是真正意义上的多用户多任务操作系统。UNIX的商业版版本主要包括SUN公司(现被Oracle公司收购)的Solaris、IBM_linux 从哪个版本开始支持lvm