图解在8086模拟器中运行汇编helloworld程序
汇编helloworld代码:
org 100h; set video mode
mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3)
int 10h ; do it!; cancel blinking and enable all 16 colors:
mov ax, 1003h
mov bx, 0
int 10h; set segment register:
mov ax, 0b800h
mov ds, ax; print "hello world"
; first byte is ascii code, second byte is color code.mov [02h], 'H'
mov [04h], 'e'
mov [06h], 'l'
mov [08h], 'l'
mov [0ah], 'o'
mov [0ch], ','
mov [0eh], 'W'
mov [10h], 'o'
mov [12h], 'r'
mov [14h], 'l'
mov [16h], 'd'
mov [18h], '!' ; wait for any key press:
mov ah, 0
int 16hret
启动仿真;程序起始地址是0700:0100;
设置显示模式;
AH=00H
AH=00/INT 10H 是用来设定显示模式的服务程序,AL 寄存器表示欲设定的模式:
AL 文字/图形 分辨率 颜色
00 文字 40*252
01 文字 40*2516
02 文字 80*252
03 文字 80*2516
04 图形 320*2002
05 图形 320*2004
06 图形 640*2002
此处设置为文字、80*25、16色;
看下图;执行int 10h指令时跳到int 10h的中断服务程序处,F4190、F4191;执行完后返回;
看上图,同时栈会发生变化;因为;
CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下:
1)取中断类型码n;
2)标志寄存器入栈,IF=0,TF=0;
3)CS、IP入栈
4)(IP)=(n*4),(CS)=(n*4+2)
从此处转去执行n号中断的中断处理程序。
有标志寄存器,cs,ip的入栈动作;
cancel blinking and enable all 16 colors;
设置数据段为b800h;
把048h放入b.[00002h],此处是直接写显存;然后H显示出来;
显存
从 0B800H:0000H 开始,就是显示器的存储空间,这就是显存。
在 DOS 流行的时候,屏幕的显示,基本上都是文本模式。
在文本模式下,屏幕上共有 25 行、80 列,可显示 2000 个字符。
当对 0B800H:0000H 开始的内存空间写入数据的时候,字符将立即在屏幕上显示出来,这就是直接写屏。
要在屏幕上显示一个字符,需要连续写入两个字节,第一字节就是字符的 ASCII 码,第二字节是显示属性字节。
那么,要想写入一满屏的字符,就需要连续写入 4000 字节。这个数字就是“显存”的大小。
后面的类同;
显示完毕;
显存似乎没有仿真出来;看不到显存中的内容;
int 16h,键盘中断;
功能号:00H和10H
功能:从键盘读入字符
入口参数:AH
=00H—读键盘
=10H—读扩展键盘,可根据0000:0496H单元的内容判断:
扩展键盘是否有效
等待输入字符,然后结束程序;
图解在8086模拟器中运行汇编helloworld程序相关推荐
- 在8086模拟器中运行汇编求平均值程序
DATA1 SEGMENT data DW 90, 95, 54, 65, 36, 78, 66, 0, 99, 50, -1 Average DW 0 DATA1 ENDS CODE1 SEGMEN ...
- cocoscreator2.4.3构建发布多平台包并在IOS模拟器中运行游戏
1.打开游戏 vip_kingdown_rush_2 ,点击构建发布,打开Editor Window,选择发布平台与发布路径,如Mac平台,发布路径为工程目录下build文件夹,然后点击构建,可生成M ...
- java模拟器怎么安装路径_如何使用appium访问来自不同网络位置的路径,直接在模拟器中安装移动应用程序(Android / iOS)?...
我分别在windows和mac机器上启动我的android和ios模拟器, 我的应用程序由CI系统在网络位置生成(路径:\ xxx.yyy.com \ Mobile \ android和\ xxx.y ...
- 在任意的远程桌面的session中运行指定的程序
//在其它session中(如远程桌面的session)运行指定的程序,需要具有system权限,可以在任意的桌面里运行指定程序#include <windows.h> #include ...
- 在Linux中运行Nancy应用程序
最近在研究如何将.NET应用程序移植到非Windows操作系统中运行,逐渐会写一些文章出来.目前还没有太深的研究,所以这些文章大多主要是记录我的一些实验. 这篇文章记录了我如何利用NancyFx编写一 ...
- php运行python爬虫_群晖系统中运行python爬虫程序
重要:本文最后更新于2021-01-28 17:02:43,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 准备入手一台NAS,事先的学习是必须的,今天在VM虚拟机中安装好NAS后, ...
- 在外部DDR3内存中运行的MicroBlaze程序的固化方法
本文以基于米联客MA703FA开发板的MicroBlaze LWIP千兆以太网例程为例,详细介绍在外部DDR3内存中运行的MicroBlaze程序的固化方法. FPGA型号:XC7A35TFGG484 ...
- 创世贴|怎么在64或32位系统中运行16位程序《大富翁》
创世贴|怎么在64或32位系统中运行16位程序<大富翁> 绪言 大家好!纵观游戏行业的发展,可谓是进步迅猛.百花齐放.游戏是每个人在学习.工作之余休闲娱乐的良药.玩游戏的人从皇宫贵族到社会 ...
- docker 在线运行c语言程序,在docker中运行mpi应用程序
我正在玩docker,我希望能够在其中启动mpi应用程序. 我正在使用ubuntu:latest作为基本图像,我已经安装了所需的工具来编译我的程序并将其与mpi链接. 当我使用mpirun启动程序时, ...
最新文章
- 路由器连接帧中继网络的接口是(11),连接双绞线以太网的接口是(12)。 【答案】D B
- 揭秘物联网之城无锡鸿山的科技密码
- php设定错误和异常处理可使用的函数
- 如何花钱让2000元的月收入工资价值最大化?
- WinRAR 注册方法
- 动态代理案例1:运用Proxy动态代理来增强方法
- Ubuntu18.04安装Docker
- 创建实现一个简单的web项目
- 利用PUT方式上传文件的方法研究
- TBXML常用API
- java 登陆系统设计_Java 程序设计——登录系统
- jQuery开发之windows边栏小工具开发(Gadget development)- wi...
- Spring Quartz 框架结构概述(一)[转]
- MATLAB三维散点图的绘制函数详解(scatter3、plot3) (有示例)
- 关于泛型中包含级联的List转化为json数据的处理
- 服务器共享文件打开未响应,win7共享文件夹会话未响应
- 奇舞周刊第 424 期:Sketch 插件开发指南
- SQLiteSpy 数据库软件
- python数据挖掘(2.分类 OneR算法)
- YOLOV3--训练数据+视频检测