《汇编语言》- 读书笔记 - 第17章-实验17 编写包含多个功能子程序的中断例程

《汇编语言》- 读书笔记 - 第17章-实验17 编写包含多个功能子程序的中断例程

  • 逻辑扇区
    • 根据逻辑扇区号算出物理编号
    • 中断例程:通过逻辑扇区号对软盘进行读写
  • 代码
    • 安装 int 7ch
  • 测试程序
  • 效果

实现通过逻辑扇区号对软盘进行读写

逻辑扇区

计算公式: 逻辑扇区号 =(面号*80+磁道号)*18+扇区号-1

let lg = (,, 扇区) => (*80+)*18+扇区-1;
lg(1,60,10); // 2529
// 创建一个空数组来存放所有的逻辑扇区号
let logicalSectors = [];
// 遍历指定范围的所有组合
for (let head = 0; head <= 1; head++) { // 面号从0到1for (let track = 0; track <= 79; track++) { // 磁道号从0到79for (let sector = 1; sector <= 18; sector++) { // 扇区号从1到18logicalSectors.push([head,track,sector]);}}
}
// 输出所有逻辑扇区号(索引就是逻辑扇区号)
console.table(logicalSectors);
扇区逻辑扇区
0010
179182879

根据逻辑扇区号算出物理编号

物理编号公式
面号取商( 逻辑扇区号 / 1440 )
磁道号取商( 取余( 逻辑扇区号 / 1440 ) / 18 )
扇区号取余( 取余( 逻辑扇区号 / 1440 ) / 18) + 1

中断例程:通过逻辑扇区号对软盘进行读写

功能通过逻辑扇区号对软盘进行读写
参数ah = 功能号:0=读,1=写;
dx = 逻辑扇区号;
es:bx=用于读写的缓冲区

代码

安装 int 7ch

assume cs:code
code segmentstart:	; ---------------- 安装(复制数据) ----------------mov ax,csmov ds,axmov si,offset i7ch		;设置 ds:si 指向源地址mov ax,0mov es,axmov di,200h				;设置 es:di 指向目的地址mov cx,offset i7chend -offset i7ch	;设置 cx为传输长度cld					;设置传输方向为正。movsb中si,di递增rep movsb			;重复复制数据次数由 cx 控制; ---------------- 安装(复制数据) ----------------; ----------------- 设置中断向量 -----------------mov ax,0mov es,ax						; 段地址 0mov word ptr es:[7ch*4],200h	; 设置【中断处理程序】的:偏移地址mov word ptr es:[7ch*4+2],0		; 设置【中断处理程序】的:段地址; ----------------- 设置中断向量 -----------------mov ax, 4c00H		; 退出int 21H				; 触发33号中断
; =======================================================
; --------------------- 中断处理程序 --------------------
; 通过逻辑扇区号对软盘进行读写
; -------------------------------------------------------
; 参数:ah = 功能号:0=读,1=;
; 参数:dx = 逻辑扇区号;
; 参数:es:bx = 用于读写的缓冲区
; -------------------------------------------------------org 200h 		; ORG 指定下面代码从一个特定地址开始编译i7ch:	push dx			; 备份寄存器cmp ah,1		; 功能号>1直接退出ja i7chokcall logical2physical	; 算出物理:面号、磁道号、扇区号mov dl,0				; 驱动器号 A盘mov al,8				; 读写扇区数cmp ah,0				je read			; 读跳 readjmp write		; 否则跳 writeread:mov ah,02hint 13hjmp i7chokwrite:mov ah,02hint 13hi7chok:	pop dx			; 还原寄存器iret 			; 返回原程序
; --------------------- 中断处理程序 --------------------
; =======================================================; =======================================================
; --------------------- 中断处理程序 --------------------
; 根据逻辑扇区号算出物理编号
; -------------------------------------------------------
; 参数:dx = 逻辑扇区号
; 返回:dh = 面号 	01
; 返回:ch = 磁道号 06
; 返回:cl = 扇区号 109
; -------------------------------------------------------
logical2physical:jmp short l2ph_starthts dw 1440, 18
l2ph_start: push ax		; 备份寄存器push bxmov ax,dxmov dx,0; 逻辑扇区号 / 1440:商ax = 面号,余数dx拿去算:磁道号、扇区号div word ptr hts[0]	; 除以 1440mov bx,ax	; 面号(临时保存); dx / 18:商al = 磁道号,余数ah + 1 = 扇区号mov ax,dxdiv byte ptr hts[2]	; 除以 18mov ch,al	; 磁道号inc ahmov cl,ah	; 扇区号mov dh,bl	; 面号pop bx		; 还原寄存器pop axret 		; 返回原程序
; --------------------- 中断处理程序 --------------------
; =======================================================i7chend:	nop
code ends
end start

测试程序

assume cs:code
data segmentarr db 4000 dup(0)
data endscode segmentstart: mov ax,datamov es,axmov bx,offset arrmov ah,0mov dx,0int 7chok:	mov ax,4c00hint 21h
code ends
end start

效果

int 13h 读写始终失败,DOSBox 和 VMware上装的 DOS7.10 都试过了。暂时没想到办法

DOSBox
在这里插入图片描述

虚拟机上DOS
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS基础知识

font-family: "Trebuchet MS", Verdana, sans-serif; 字体栈&#xff0c;浏览器会一个一个试过去看下哪个可以用 font-size16px; font-size1em; font-size100%;//相对于16px 字体大小&#xff0c;需要进行单位换算16px1em font-weightnormal;//400font-weight属性…

YoloV5改进策略:Block改进|自研Block,涨点超猛|代码详解|附结构图

涨点效果 参考模型 参考的Block,如下图: 我对Block做了修改,修改后的结构图如下: 代码详解 from timm.models.layers import DropPathfrom torch import Tensor def channel_shuffle(x: Tensor, groups:

用Java Socket手撸了一个HTTP服务器

作为一个 Java 后端&#xff0c;提供 HTTP 服务可以说是基本技能之一了&#xff0c;但是你真的了解 HTTP 协议么&#xff1f;你知道知道如何手撸一个 HTTP 服务器么&#xff1f;Tomcat 的底层是怎么支持 HTTP 服务的呢&#xff1f;大名鼎鼎的 Servlet 又是什么东西呢&#xff0…

可观测性是什么?新手入门指南!

如果您之前对可观测性重要性&#xff0c;益处&#xff0c;以及组成不甚了解&#xff0c;本文是一个合适的指南手册。 什么是可观测性&#xff1f; 可观测性被定义为根据系统产生的输出数据&#xff08;如日志&#xff0c;指标和链路追踪&#xff09;来衡量当前系统运行状态的…

代码理解 pseudo_labeled = outputs.max(1)[1]

import torchls torch.Tensor([[0.2,0.4],[0.3,0.2]]) print(ls.max(1))

STL之deque容器代码详解

1 基础概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入删除操作。 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低。 deque相对而言&#xff0c;对头部的插入删除速度回比vector快。 vector访问…

Unity Shader实现UI流光效果

效果&#xff1a; shader Shader "UI/Unlit/Flowlight" {Properties{[PerRendererData] _MainTex("Sprite Texture", 2D) "white" {}_Color("Tint", Color) (1, 1, 1, 1)[MaterialToggle] PixelSnap("Pixel snap", float…

简洁的在线观影开源项目

公众号&#xff1a;【可乐前端】&#xff0c;每天3分钟学习一个优秀的开源项目&#xff0c;分享web面试与实战知识。 每天3分钟开源 hi&#xff0c;这里是每天3分钟开源&#xff0c;很高兴又跟大家见面了&#xff0c;今天介绍的开源项目简介如下&#xff1a; 仓库名&#xff1…

海外媒体发稿:7种媒体套餐推广策略解析-华煤舍

有效的媒体宣传策略对于产品或服务的推广至关重要。本文将介绍7种媒体套餐推广策略&#xff0c;帮助您惊艳市场&#xff0c;并取得成功。以下是每种策略的拆解描述&#xff1a; 1. 广告投放 广告投放是最常见的宣传手段之一。通过在各种媒体平台上购买广告&#xff0c;如电视、…

Web渗透测试流程

什么是渗透测试 渗透测试 (penetration test),是通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析&#xff0c;这个分析是从一个攻击者可能存在的位置来进行的&#xff0c;并且从这个…

linux 查看打开使用了哪些端口

你可以使用 netstat 命令来查看Linux系统中正在使用的端口。例如&#xff0c;要查看所有正在使用的TCP和UDP端口&#xff0c;你可以运行&#xff1a; sudo netstat -tulpn如果你只想查看所有正在使用的TCP端口&#xff0c;你可以运行&#xff1a; sudo netstat -tpln 如果你只…

全网最最最详细centos7如何安装docker教程

在CentOS 7上安装Docker主要包括以下步骤&#xff1a; 1. 卸载旧版本的Docker 首先&#xff0c;需要确保系统上没有安装旧版本的Docker。可以通过以下命令来卸载它们&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-late…

【Linux】编译器-gcc/g++使用

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 初见gcc和g3. 程序的翻译过程3.1 预处理3.1.1 宏替换 去注释 头文件展开3.1.2 条件编译 3.2 编译3.3 汇编3.4 链接 4. 链接4.1 动态链接4.2 静态链接 1. 前言 在之…

吴恩达机器学习-可选实验:特征缩放和学习率(多变量)

文章目录 目标工具概念问题陈述数据集多变量梯度下降学习率a9.9e-7a9e-7a1e-7 特征缩放实现 恭喜致谢 目标 在本实验中&#xff0c;你将: 利用在上一个实验中开发的多变量例程对具有多个特征的数据集运行梯度下降探讨学习率alpha对梯度下降的影响通过使用z-score归一化的特征…

域控操作十:安装包exe转msi软件下发

需要的文件 Advanced Installer 软件用来将exe转换成msi因为域控只能下发msi格式 一个exe安装包这里拿微信举例 一个没有密码的共享文件夹 1.exe转MSI 2&#xff0c;开始下发 服务器和用户刷新策略 #完成

某品零食交易平台设计与实现|基于springboot+ Mysql+Java的某品交易平台设计与实现(源码+数据库+文档+PPT)

目录 基于springboot MysqlJava的某品交易平台设计与实现 摘 要 系统详细设计 数据库设计 论文参考 源码获取 文末获取源码联系 基于springboot MysqlJava的某品交易平台设计与实现 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的…

html--彩虹爱心

文章目录 js内容cssreset.min.cssstyle.css html内容 js内容 const colors ["#e03776","#8f3e98","#4687bf","#3bab6f","#f9c25e","#f47274"]; const SVG_NS http://www.w3.org/2000/svg; const SVG_XLINK &q…

Spring Boot 多环境配置

Spring Boot 多环境配置 在现代的软件开发中&#xff0c;通常需要将应用程序部署到不同的环境中&#xff0c;如开发环境、生产环境和测试环境等。每个环境可能需要不同的配置参数&#xff0c;例如数据库连接信息、日志级别等。在 Spring Boot 中&#xff0c;我们可以通过简单的…

智慧库室管控系统-智慧枪弹管控系统

项目背景&#xff1a; 针对部队装备管理现状&#xff0c;部队在进行硬件系统建设的同时&#xff0c;需通过装备管理系统软件的建设&#xff0c;综合集成监控、报警、出入库、信息发布、库管理、监测、防护等系统&#xff0c;对装备进行立体监控、实时预警、快速处理&#xff0…

springboot255基于spring boot的疫情信息管理系统

疫情信息管理系统的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定疫情信息管理系统…