汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)

news/2024/9/18 22:06:34 标签: 汇编, 汇编语言, X86, 8086, NASM, Virtual Box, VirtualBox

题目:

编写一段主引导扇区程序,计算从1加到1000的和,并在屏幕上显示结果

输出结果:

代码:

jmp near start
text db '1+2+3+...+1000='
start:
      mov ax,0x07c0
      mov ds,ax     ;数据段从主引导区开始

      mov ax,0xb800
      mov es,ax     ;显存地址从B8000物理地址开始

      mov si,text   ;si指向text的第一个字符
      mov di,0
      mov cx,start-text
  s1:
      mov al,[si]
      mov [es:di],al ;保存字符
      inc di
      mov byte [es:di],0x07 ;保存字符属性:黑底白字
      inc si
      inc di
  loop s1 ;显示'1+2+3+...+1000='

      xor ax,ax
      xor dx,dx
      mov cx,1000
  s2:
      add ax,cx
      adc dx,0 ;dx=0+CF
  loop s2 ;累加1~1000,结果为dx:ax(dx高16位,ax低16位)
  ;此循环结束后,cx为0不用再次清零

      mov ss,cx ;设置栈的段地址
      mov sp,cx ;设置栈指针
      mov bx,10 ;设置除数

  s3:
      inc cx ;cx记录条件循环次数(数位+1)
      div bx ;(dx:ax)÷bx(为10)=ax......dx
      or dl,0x30 ;把数字转换为字符
      push dx ;余数进栈保存
      xor dx,dx ;dx清0准备下一次除
      cmp ax,0 ;商为0提前退出,提高效率
      jne s3


s4:
      pop dx
      mov [es:di],dl
      inc di
      mov byte [es:di],0x07
      inc di
  loop s4 ;显示各个数位,可参考s1循环

      jmp near $
      times 510-($-$$) db 0 ;填满至512字节
      db 0x55,0xaa ;结尾格式必须写

点我下载编译后产生的bin文件(写入主引导扇区后可在VirtualBox上运行)

具体怎么将bin文件写入主引导扇区见此文汇编语言在虚拟机中输出“Hello World!”

 注意事项:

1.s1循环中,最后一定要加inc di,否则新写入的数据会被覆盖!

2.s3循环中,一定是保存完dx后再为dx清零


http://www.niftyadmin.cn/n/5664601.html

相关文章

Flask找上下文源码

1. app Flask(__name__) app.__call__ 1.1 按住 command 键 点击 进到这个函数里 1.2 接着找 return 看看返回什么 点进去 1.3 找到定义函数 1.4 点进去先看这个里边有啥 1.5 找到定义类 1.6 找到RequestContext 类 1.7 找到 RequestContext ---> 的push 方法 1.8 点击 _c…

边缘智能-大模型架构初探

R2Cloud接口 机器人注册 请求和应答 注册是一个简单的 HTTP 接口,根据机器人/用户信息注册,创建一个新机器人。 请求 URL URLhttp://ip/robot/regTypePOSTHTTP Version1.1Content-Typeapplication/json 请求参数 Param含义Rule是否必须缺省roboti…

Python 入门教程(4)数据类型 | 4.1、数据类型

文章目录 一、数据类型1、弱类型与强类型2、变量没有类型,数据有类型3、不可变类型和可变类型 前言: Python 是一种高级编程语言,以其简洁的语法、丰富的内置库和动态类型系统而闻名。在 Python 中,数据类型是编程的基础&#xff…

html加载界面发送ajax请求

html加载界面发送ajax请求 makeAjaxRequest();function makeAjaxRequest() {var xhr new XMLHttpRequest(); // 创建一个新的XMLHttpRequest对象xhr.open(GET, yourUrlPath, true); // 配置请求,设置请求类型、URL 和 是否异步xhr.send(); // 发送请求}

湖北师范大学-Java面向对象-Java中的异常

目录 第1关:Java 中的异常处理机制 第2关:捕获异常 第3关:抛出异常 第4关:自定义异常 第1关:Java 中的异常处理机制 第2关:捕获异常 package step2;import java.util.Scanner;public class Task {publ…

SpringBoot2:web开发常用功能实现及原理解析-@ControllerAdvice实现全局异常统一处理

文章目录 前言1、工程包结构2、POM依赖3、Java代码 前言 本篇主要针对前后端分离的项目,做的一个统一响应包装、统一异常捕获处理。 在Spring里,我们可以使用ControllerAdvice来声明一些关于controller的全局性的东西,其用法主要有以下三点…

编译运行 webAssembly(wasm)

环境准备&#xff1a; lunix下docker 参考https://hub.docker.com/r/emscripten/emsdk 拉编译环境 docker pull emscripten/emsdk 编译 随便找个目录&#xff0c;敲下面命令&#xff0c;编译一个webAssembly 程序 # create helloworld.cpp cat << EOF > hellowo…

提高数据集成稳定性:EMQX Platform 端到端规则调试指南

自 5.7.0 版本起&#xff0c;EMQX 支持了 SQL 调试&#xff0c;并支持在数据集成全流程中进行规则调试&#xff0c;使用户能够在开发阶段就全面验证和优化规则&#xff0c;确保它们在生产环境中的稳定高效运行。 点击此处下载 EMQX 最新版本&#xff1a;https://www.emqx.com/z…