当前位置: 首页 > news >正文

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

题目:

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

输出结果:

代码:

jmp near start
text db '1+2+3+...+1000='
start:mov ax,0x07c0mov ds,ax     ;数据段从主引导区开始mov ax,0xb800mov es,ax     ;显存地址从B8000物理地址开始mov si,text   ;si指向text的第一个字符mov di,0mov cx,start-texts1:mov al,[si]mov [es:di],al ;保存字符inc dimov byte [es:di],0x07 ;保存字符属性:黑底白字inc siinc diloop s1 ;显示'1+2+3+...+1000='xor ax,axxor dx,dxmov cx,1000s2:add ax,cxadc dx,0 ;dx=0+CFloop 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......dxor dl,0x30 ;把数字转换为字符push dx ;余数进栈保存xor dx,dx ;dx清0准备下一次除cmp ax,0 ;商为0提前退出,提高效率jne s3s4:pop dxmov [es:di],dlinc dimov byte [es:di],0x07inc diloop 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.mrgr.cn/news/26670.html

相关文章:

  • 数据库的索引是什么?
  • 2024年上半年软考【中级】网络工程师 综合知识真题回顾
  • 博弈论模型
  • Ollama+Flux模型会擦出怎样的火花
  • CANopen协议的理解
  • 集群聊天服务器项目【C++】项目介绍和环境搭建
  • 深入掌握:如何进入Docker容器并运行命令
  • Telegram Bot 配置指南:使用 Cloudflare Worker 部署
  • LSS如何创建视锥
  • 低代码基于 vue-draggable-resizable 实现 选中状态在点击配置区域时依然生效 点击其他区域取消选中状态
  • 【编程基础知识】数据库表设计三范式
  • C#使用Access数据库使用总结
  • 系统架构师考试学习笔记第五篇——架构设计补充知识(26)论文写作
  • 产学研合作赋能产业升级新动能
  • 2024年下半年东湖高新区中级、副高职称水测出成绩了
  • 【C++】Linux平台C++实现Unix域、TCP/IP、UDP socket通信
  • 实习项目|苍穹外卖|day10
  • Long类型前后端数据不一致
  • 落地扶持丨云微客山西临汾落地会销圆满收官
  • JVM四种垃圾回收算法以及G1垃圾回收器(面试)