汇编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程序相关推荐

  1. 在8086模拟器中运行汇编求平均值程序

    DATA1 SEGMENT data DW 90, 95, 54, 65, 36, 78, 66, 0, 99, 50, -1 Average DW 0 DATA1 ENDS CODE1 SEGMEN ...

  2. cocoscreator2.4.3构建发布多平台包并在IOS模拟器中运行游戏

    1.打开游戏 vip_kingdown_rush_2 ,点击构建发布,打开Editor Window,选择发布平台与发布路径,如Mac平台,发布路径为工程目录下build文件夹,然后点击构建,可生成M ...

  3. java模拟器怎么安装路径_如何使用appium访问来自不同网络位置的路径,直接在模拟器中安装移动应用程序(Android / iOS)?...

    我分别在windows和mac机器上启动我的android和ios模拟器, 我的应用程序由CI系统在网络位置生成(路径:\ xxx.yyy.com \ Mobile \ android和\ xxx.y ...

  4. 在任意的远程桌面的session中运行指定的程序

    //在其它session中(如远程桌面的session)运行指定的程序,需要具有system权限,可以在任意的桌面里运行指定程序#include <windows.h> #include ...

  5. 在Linux中运行Nancy应用程序

    最近在研究如何将.NET应用程序移植到非Windows操作系统中运行,逐渐会写一些文章出来.目前还没有太深的研究,所以这些文章大多主要是记录我的一些实验. 这篇文章记录了我如何利用NancyFx编写一 ...

  6. php运行python爬虫_群晖系统中运行python爬虫程序

    重要:本文最后更新于2021-01-28 17:02:43,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 准备入手一台NAS,事先的学习是必须的,今天在VM虚拟机中安装好NAS后, ...

  7. 在外部DDR3内存中运行的MicroBlaze程序的固化方法

    本文以基于米联客MA703FA开发板的MicroBlaze LWIP千兆以太网例程为例,详细介绍在外部DDR3内存中运行的MicroBlaze程序的固化方法. FPGA型号:XC7A35TFGG484 ...

  8. 创世贴|怎么在64或32位系统中运行16位程序《大富翁》

    创世贴|怎么在64或32位系统中运行16位程序<大富翁> 绪言 大家好!纵观游戏行业的发展,可谓是进步迅猛.百花齐放.游戏是每个人在学习.工作之余休闲娱乐的良药.玩游戏的人从皇宫贵族到社会 ...

  9. docker 在线运行c语言程序,在docker中运行mpi应用程序

    我正在玩docker,我希望能够在其中启动mpi应用程序. 我正在使用ubuntu:latest作为基本图像,我已经安装了所需的工具来编译我的程序并将其与mpi链接. 当我使用mpirun启动程序时, ...

最新文章

  1. 路由器连接帧中继网络的接口是(11),连接双绞线以太网的接口是(12)。 【答案】D B
  2. 揭秘物联网之城无锡鸿山的科技密码
  3. php设定错误和异常处理可使用的函数
  4. 如何花钱让2000元的月收入工资价值最大化?
  5. WinRAR 注册方法
  6. 动态代理案例1:运用Proxy动态代理来增强方法
  7. Ubuntu18.04安装Docker
  8. 创建实现一个简单的web项目
  9. 利用PUT方式上传文件的方法研究
  10. TBXML常用API
  11. java 登陆系统设计_Java 程序设计——登录系统
  12. jQuery开发之windows边栏小工具开发(Gadget development)- wi...
  13. Spring Quartz 框架结构概述(一)[转]
  14. MATLAB三维散点图的绘制函数详解(scatter3、plot3) (有示例)
  15. 关于泛型中包含级联的List转化为json数据的处理
  16. 服务器共享文件打开未响应,win7共享文件夹会话未响应
  17. 奇舞周刊第 424 期:Sketch 插件开发指南
  18. SQLiteSpy 数据库软件
  19. python数据挖掘(2.分类 OneR算法)
  20. YOLOV3--训练数据+视频检测

热门文章

  1. Python的逻辑判断和循环 || 打印九九乘法表
  2. Docker selenium自动化 - windows版docker的安装与运行环境检测
  3. 【VS Code】更改默认的单击打开文档模式
  4. matlab获取标量
  5. Roman to Integer
  6. 径向基函数插值(1)
  7. 基于服务器端保存用户的查询参数
  8. Django-cookie的保存以及删除操作
  9. 【Linux】 linux的进程系统一点补充
  10. Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用