首页 > 其他分享 >0162-显示 hello world

0162-显示 hello world

时间:2023-01-31 16:56:36浏览次数:53  
标签:00 55 0162 mov FF world 255 hello 85

环境

  • Time 2022-11-08
  • WSL-Ubuntu 22.04
  • QEMU 6.2.0
  • NASM 2.15.05

前言

说明

参考:《x86汇编语言:从实模式到保护模式》李忠
参考:https://wiki.osdev.org/Printing_To_Screen

目标

在屏幕上显示 hello 字符串。

显存

彩色的文本显示内存的地址是 0xB800,只要向这个地址写入字符和颜色,就可以直接显示。
其中使用两个字节来显示一个字,第一个字节对应字符的 ASCII 码,第二个对应具体的颜色。

颜色

Color number Color name RGB value Hex value
0 Black 0 0 0 00 00 00
1 Blue 0 0 170 00 00 AA
2 Green 0 170 0 00 AA 00
3 Cyan 0 170 170 00 AA AA
4 Red 170 0 0 AA 00 00
5 Purple 170 0 170 AA 00 AA
6 Brown 170 85 0 AA 55 00
7 Gray 170 170 170 AA AA AA
8 Dark Gray 85 85 85 55 55 55
9 Light Blue 85 85 255 55 55 FF
10 Light Green 85 255 85 55 FF 55
11 Light Cyan 85 255 255 55 FF FF
12 Light Red 255 85 85 FF 55 55
13 Light Purple 255 85 255 FF 55 FF
14 Yellow 255 255 85 FF FF 55
15 White 255 255 255 FF FF FF

汇编代码

;显示 hello 字符串
mov ax,0xb800
mov ds,ax

mov byte[0x00],'h'
mov byte[0x01],0x02
mov byte[0x02],'e'
mov byte[0x03],0x02
mov byte[0x04],'l'
mov byte[0x05],0x02
mov byte[0x06],'l'
mov byte[0x07],0x02
mov byte[0x08],'o'
mov byte[0x09],0x02

times 510 - $ + $$ db 0
db 0x55
db 0xaa

在这里,借助了数据段 ds 的地址,不指定数据段的情况下,默认使用 ds 访问。

启动 QEMU

之前是通过 -nographic 启动的,因为现在需要显示,所以需要换个参数:

qemu-system-i386 -s -S -drive format=raw,file=main -curses

效果

可以看到,在最开始的地方,绿色的颜色显示了 hello 字符串。

显示hello

总结

在屏幕上显示了绿色的 hello 字符串。

附录

标签:00,55,0162,mov,FF,world,255,hello,85
From: https://www.cnblogs.com/jiangbo4444/p/17079760.html

相关文章

  • 1.Hello Django
    HelloDjango安装Django使用pipenv命令。进入项目根目录,运行:>pipenvinstallDjango==4.1.5测试一下安装是否成功,先在命令行输入pipenvrunpython启动虚拟环境......
  • (原创)【B4A】一步一步入门01:简介、开发环境搭建、HelloWorld
    一、前言作者注:絮絮叨叨,可跳过不看。一直有开发跨平台软件的需求。因为我的主力是C#,所以当MAUI出现后,我欣喜若狂的开始学习研究。但是经历了两个月左右的时间,我弃坑了,我......
  • Hello Python
    本篇笔记介绍Python编程学习的入门程序HelloWorld,主要包含以下内容:HelloWorld究竟从何而来?PythonHelloWorld此外,重点说明Python版本HelloWorld的核心组......
  • 在python代码中,写其他编程语言的hello world
    1.helloworld不论哪种编程语言,在你最开始学习时,都会给你一个在终端输出helloworld的示例print("helloworld")这已经成为一种惯例,最近在github上闲逛时,偶遇了一个特别有......
  • Hello,World!
    Hello,World!随便新建一个文件夹,存放代码新建一个Java文件文件后缀名为.javaHello.java【注意点】系统可能没有显示文件后缀名,我们需要手动打开编写代......
  • HelloWord
    1.随便新建一个文件夹,存放代码2.新建一个java文件 1.文件的后缀名为.java 2.Hello.java 3.系统可能没有显示文件后缀名,我们需要手动打开3.编写代码publicclassHell......
  • HELLO WORLD
    今天是我第一次注册这个网站,今后我会用来记录我每一天所学的知识,希望能和大家一起进步。也希望大家能够一起来监督!我和大家一起努力!#include<stdio.h>intmain(void){prin......
  • Hello World!
    1.下面图解释得挺清楚的/bin/echo"HelloWorld"//要执行的命令放红色区域那儿例1:打印HelloWorld  例2:ls查看目录文件 ......
  • 《HelloGitHub》第 82 期
    兴趣是最好的老师,HelloGitHub让你对编程感兴趣!简介HelloGitHub分享GitHub上有趣、入门级的开源项目。https://github.com/521xueweihan/HelloGitHub这里有实......
  • RealWorld CTF 5th ShellFind 分析
    前言RealWorldCTF5th里的一道iot-pwn,根据真实设备固件改编而成,觉得题目贴近iot实战且很有意思,故在此记录一下复现过程。题目分析题目描述HelloHacker.Youdon'tk......