nasm专题

Intel8086处理器使用NASM汇编语言实现操作系统18-保护模式与特权级概述

实模式下,任意程序,可以操作任意内存位置,为了避免这种情况的发生,所以有了保护模式,保护的就是用户程序之间的相互隔离(当然了,外挂之类的那都是后文要说的了,暂不考虑) 80386及它以后的处理器,都支持三种模式 1.实模式 x86是32位的cpu,所以无法运行早期8086那种16位汇编程序的时候,为了能运行16位程序,这种方式就叫做实模式,计算机启动的时候,是从实模式开始启动的,包括我们如今

Intel8086处理器使用NASM汇编语言实现操作系统10-硬盘读取(in/out)

本示例遇到的新汇编指令in,out out 正确写法 out 0xf3,ax ;将ax里的值放到0xf3端口,且只能是ax,al,eaxout dx,ax ;第1操作数如果是寄存器,则必须使用dx 注意:我个人在写指令的时候,遇见一个奇怪的问题(求大神解答),某些8位端口使用ax会出现错误,比方说0x1f3端口,但是又有很多8位端口使用ax并不会出问题,这种问题非常难以调试,所以

Intel8086处理器使用NASM汇编语言实现操作系统07-以除法和BCD码两种方式显示10进制和16进制数字到屏幕/div/xor

div除法指令,这是我最烦的汇编指令之一了,它的写法在不同位数CPU上都是不一样的 div bh ;表示用AX里的值除以bh寄存器中的值;因为div后面接8位寄存器或者内存地址,商在AL寄存器中,余数在AH寄存器中div bx ;表示用高16位在DX,低16位在AX里的值,除以bx寄存器中的值;因为div后面接16位寄存器或者内存地址,商在AX寄存器中,余数在DX寄存器中div ebx

Intel8086处理器使用NASM汇编语言实现操作系统06-使用过程调用的方式以16进制在屏幕显示内存中的值(call/ret)

下面的代码示例将在屏幕上显示寄存器al中的值:EF mov ax,0x0000mov ss,axmov sp,0x0mov ax,0xb800 ;设置显存段地址,如果不设置,直接写[五位数地址],会越界的mov ds,ax mov al,0xEF call get_high_4_bit ;将AL中的高4位取出来放到bl的低4位cmp bl,1010B

Intel8086处理器使用NASM汇编语言实现操作系统05-以大写16进制在屏幕显示内存中的值(shr/shl/jb)

本文将内存中的1个值以16进制的方式显示到屏幕上,例如: 内存中的值是:0xAB,那么屏幕上就显示两个字母,A和B 内存中的值是:0xB8,那么屏幕上就显示两个字母,B和8 具体的做法是这样的:一个字节由2个16进制字符表示,所以要将1个字节分割成高4位和低4位,然后再分别判断高4位是0-9还是A-F,如果是0-9,则它的ASCII是该值加上48D,如果是A-F,则它的ASCII是该值加上55D,

Intel8086处理器使用NASM汇编语言实现操作系统04-实模式-屏幕显示不定长度的字符串(cmp/je)

本示例遇到的新汇编指令cmp,je cmp正确写法 cmp eax,666 ;用eax里的值减去666,如果值为0,则将ZR(ZF)标志位=1;如果发生借位或进位,CF(CY)标志位=1;如果溢出,则OF(OV)标志位=1cmp eax,ebxcmp byte [123], 123 cmp错误写法 cmp 123,123 ;操作数不可以都是立即数cmp [0x7c00

Intel8086处理器使用NASM汇编语言实现操作系统03-实模式-屏幕显示HelloWorld(mov,jmp,time,dd,dw,$$)

本文涉及到的汇编指令及关键字mov,jmp,times(独有),dd(独有),dw (独有),db(独有),$,$$,byte,word dd/dw times 10 db 0 ;db在8086下占用1个字节times 10 dw 0 ;dd表示一个字,在8086下占用2个字节times 10 dd 0 ;dd表示一个双字,在8086下占用4个字节,这句话是编译器编译的时候

Intel8086处理器使用NASM汇编语言实现操作系统02-实模式-显存原理

显卡以高频的刷新速度一直不停的扫描显存中的数据,将显存中的数据显示到屏幕上 显卡有两种模式 1.文本模式:为了方便叙述,本文的代码示例采用文本模式 2.图形模式 对于CPU来说,显存也是内存,显存的地址是B8000-BFFFF,文本模式下,每一个字符由两个字节组成,那么这16个bit排列如下: 屏幕上一个字符=该字符的asicc码(8bit)+背景色(高4bit)+字体颜色(低4b

Intel8086处理器使用NASM汇编语言实现操作系统01-环境搭建

使用的程序有4个,分别是 1.Nasm汇编编译器 2.Sublime文本工具(一会需要安装NASM插件) 3.VirtualBox虚拟机 4.Bochs虚拟机调试器(一个带有调试功能的虚拟机) 1.安装Nasm: nasm官网 或者直接去nasm2.15下载页 安装完毕之后,去看一下环境变量是否配置上了,我安装的是2.07版本,下图表示已经安装上了 NOTE:nasm生成列表文件使用C:\Us

(20200720已完成)在Windows上WSL中安装汇编环境NASM

源码安装 参见tutorialspoint,总是失败 apt安装 其实很简单,Ubuntu下sudo apt install nasm Example 源码filename.asm: section .datamsg db "Hello World", 10msglen equ $-msgsection .textglobal _start_start:mov rax,1mov rd

NASM中的寻址的问题

(2009-07-13 21:36) NASM 在表达式中支持两个特殊的记号,即'$'和'$$',它们允许引用当前指令的地址。'$'计算得到它本身所在源代码行的开始处的地址;所以你可以简单地写这样的代码'jmp $'来表示无限循环。'$$'计算当前段开始处的地址,所以你可以通过($-$$)找出你当前在段内的偏移。   有些时候,对于代码编译后的长度要求达到一个规定的值,需要在代码末尾填充若干

基于NASM搭建一个能编译汇编语言的汇编软件工具环境(利用NotePad++)

文章目录 一、创建汇编语言源程序二、Notepad++的下载、安装、使用三、下载和安装编译器NASM3.1 下载NASM编译器3.2 安装并配置环境变量 四、编译汇编语言源程序(使用命令)五、下载和使用配套源码及工具六、将编译功能集成到Notepad++ 一、创建汇编语言源程序 创建txt文件 然后,记事本文件后缀由txt修改为asm 然后用记事本打开编辑 二、Notepa

续:将基于Nasm汇编的打字小游戏,移植到DOSBox

续:将基于Nasm汇编的打字小游戏,移植到DOSBox 文章目录 续:将基于Nasm汇编的打字小游戏,移植到DOSBox前情提要细说1 编译2 程序入口3 定位段 运行体验 前情提要 上一篇:【编程实践】黑框框里的打字小游戏,但是汇编语言-CSDN博客 在上一篇文章中我对这个小程序进行了介绍,但由于运行环境的安装比较复杂,估计没有谁会将我的代码跑起来,可那样实在是太遗憾

【操作系统真象还原】01 Ubuntu环境下配置bochs和nasm

前言 开始学习《操作系统真象还原》这本书,记录一下学习过程。 配置 nasm nasm 简介 nasm 是一个年轻、开源、免费的汇编器。 安装 nasm sudo apt install nasm 配置 bochs 选择自行编译 bochs 源码来进行安装。 下载 bochs 源码 下载链接: bochs下载链接 选择下载压缩包: bochs-2.6.1.tar.gz 解压

ffmpeg安装遇错:nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

前言 centos 7源码编译安装ffmpeg 错误 编译FFMPEG时,出现了错误 nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.。 原因 这是因为 FFMPEG为了提高编译速度,使用了汇编指令,如MMX和SSE等。如果系统中没有yasm指令的话,就会该错误。 解决办法 安装yas

linux汇编工具之GAS(ATT 语法)和NASM(Intel 语法)比较

前言:在学校时,学过的汇编是Intel语言的汇编,编译器是MASM,使用的是DOS系统。惭愧的是那时没有对汇编语言有较深入的研究,有许多问题也不慎了解,迷迷糊糊至今。最近,在看《使用开源软件-自己写操作系统》http://code.google.com/p/writeos/ 和《自己动手写操作系统》里面提到了GNU AS编译器 和NASM编译器 ,于是,重新复习了一下汇编语言编程的相关知识,对汇编