您现在的位置是:首页 > 正文

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

2024-01-30 20:51:52阅读 0

本示例遇到的新汇编指令cmp,je
cmp正确写法

cmp eax,666			;用eax里的值减去666,如果值为0,则将ZR(ZF)标志位=1
					;如果发生借位或进位,CF(CY)标志位=1
					;如果溢出,则OF(OV)标志位=1
cmp eax,ebx
cmp byte [123], 123

cmp错误写法

cmp 123,123							;操作数不可以都是立即数
cmp [0x7c00],[0x7c01]				;操作数不可以都是内存地址
cmp [0x7c00], 666					;操作数不知道有多长

je正确写法

;标号跳转
there:
cmp byte [si], 0x01					;不要忘记了si默认使用ds段寄存器
je there							;如果ZF=1,则跳转到there标号处执行
;寄存器跳转
je eax								;直接跳转到物理地址,与段寄存器无关

本文演示定义一个字符串,然后循环取出字符串的每个字符,依次放到显存(0xb8000开始)中

mov ax,0xb800						;设置ds/si组合,表示显存的段和偏移
mov ds,ax
mov si,0x0

mov ax,0x7c0						;设置es/bx组合,用来表示字符串
mov es,ax

mov bx,string						;bx是字符串起始地址

print:

mov dl,[es:bx]						;将bx地址中的字符串放到dl中
cmp dl,0							;判断字符串内容是否是0
je do_not_stop						;如果0就结束,直接跳走了,否则就将内容显示到屏幕上
mov byte [si],dl					
inc si
mov byte [si],0bH
inc si
inc bx
jmp print
string db 'Hello World!!I Love Rabbit'
stringend db 0x00
do_not_stop:jmp do_not_stop			;执行无限循环
times 510-($-$$) db 0h

dw 0AA55H

网站文章

  • 【自学笔记】web前端 - HTML - DAY01(编辑器+基础标签)

    【自学笔记】web前端 - HTML - DAY01(编辑器+基础标签)

    这里是Jane的自学笔记之Web前端系列~ (希望周更ᕦ(・ㅂ・)ᕤ)如果内容有问题,欢迎大家私信留言、批评指出,谢谢~主要是记录和分享,嘻嘻(〃‘▽’〃)文章目录编辑器HBuilder记事本Node...

    2024-01-30 20:51:25
  • Android之Activity的4种加载模式

    一个Task可以理解成一个Activtiy栈,可以装载一个或者多个Activity,回退和打开的顺序逻辑和基本的数据结构栈是一致的。下面的这段话非常关键:那就是,一个Application如果有N个Activity,这些Activity分布在M个Task中,那么Application的回退栈会遵循这样的原则,首先从当前Acitivty在的Task回退,直到这个Task中再无记录;那么会寻找下一个T

    2024-01-30 20:51:16
  • 分享一个随手写的简单css效果

    分享一个随手写的简单css效果

    随手制作的简单css效果前言效果图代码HTMLCSS介绍推荐Uigradients中国传统配色网站Colordrop前言 刚刚随手写了一个网页,添加了一点css的效果,虽然没有很惊艳,但个人认为有点意...

    2024-01-30 20:51:07
  • ajax首页首页显示数据库,ajax显示mysql数据库

    ajax首页首页显示数据库,ajax显示mysql数据库

    ajax显示mysql数据库 内容精选换一换GaussDB(for MySQL)支持的数据库版本,如表1所示。GaussDB(for MySQL)支持内核小版本升级,内核小版本的升级涉及性能提升、新功...

    2024-01-30 20:51:00
  • Qt中的进程与线程

    一、进程内容: 如何在Qt应用程序中启动一个进程; 进程间通讯方法; 使用进程的原因: (1)不希望将一个不太相关的功能集成到程序中 (2)或者是因为该功能与当前设计的应用程序联系不大 (3)或者是因为该功能已经可以使用现成的程序很好实现,可以使用进程调用外部的程序来实现该功能。 I、运行一个进程——QProcess类(继承自QIOdevice) 启动一个进程:调用start函数 ...

    2024-01-30 20:50:31
  • C#_实现月度信息的快捷查询

    日期字段的查询,一般需要输入开始日期和结束日期,有的时候,客户嫌麻烦,想输入2017-07这样的快捷输入来实现月度查询。这样的问题,需要程序自动补全开始日期和结束日期的范围,才能有效的获取需要的数据。开始日期:比较容易获得,条件+01字符串就可以了;结束日期:需要将开始日期转换成datatime,然后计算本月的天数,c#有现成的函数,直接用,太幸福了,然后拼出结束日期,ok。看代码

    2024-01-30 20:50:24
  • Spring常用注解

    Spring常用注解

    2019独角兽企业重金招聘Python工程师标准>>> ...

    2024-01-30 20:50:17
  • 【ChatGPT+Python】Landsat卫星图像黑边去云及旋转校正

    【ChatGPT+Python】Landsat卫星图像黑边去云及旋转校正

    Landsat的遥感影像四个角有黑色区域,这是正常的。但是如果你真的想去掉黑色区域的话,你可以使用重分类,把黑色的区域变成白色,这样和背景就一致了,在发布服务的时候设为白色透明就可以了。旋转正了的话,...

    2024-01-30 20:49:47
  • Struts的三种传参方式

    Struts的三种传参方式

    1、通过属性传参数(Attr) UserAction.java package com.bebig.struts2.user.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String name;

    2024-01-30 20:49:39
  • 【OpenCV C++&Python】(一)图像读取、显示和保存

    【OpenCV C++&Python】(一)图像读取、显示和保存

    文章目录OpenCV简介Mat图像存储方式显式创建Mat对象输出格式图像读取、显示和保存C++Python OpenCV简介 OpenCV(开源计算机视觉库)是一个开源库,是基于C/C++开发的: O...

    2024-01-30 20:49:33