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

news2024/11/20 4:34:51

《汇编语言》- 读书笔记 - 第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到1
    for (let track = 0; track <= 79; track++) { // 磁道号从0到79
        for (let sector = 1; sector <= 18; sector++) { // 扇区号从1到18
            logicalSectors.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 segment
 start:	; ---------------- 安装(复制数据) ----------------
		mov ax,cs
		mov ds,ax
		mov si,offset i7ch		;设置 ds:si 指向源地址
		
		mov ax,0
		mov es,ax
		mov di,200h				;设置 es:di 指向目的地址

		mov cx,offset i7chend -offset i7ch	;设置 cx为传输长度
		cld					;设置传输方向为正。movsb中si,di递增
		rep movsb			;重复复制数据次数由 cx 控制
		; ---------------- 安装(复制数据) ----------------
		
		; ----------------- 设置中断向量 -----------------
		mov ax,0
		mov es,ax						; 段地址 0
		mov 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 i7chok
			
			call logical2physical	; 算出物理:面号、磁道号、扇区号
			mov dl,0				; 驱动器号 A盘
			mov al,8				; 读写扇区数
			
			cmp ah,0				
			je read			; 读跳 read
			jmp write		; 否则跳 write
			
	  read:
			mov ah,02h
			int 13h
			jmp i7chok
	 write:
			mov ah,02h
			int 13h
			
	i7chok:	pop dx			; 还原寄存器
			iret 			; 返回原程序
; --------------------- 中断处理程序 --------------------
; =======================================================

; =======================================================
; --------------------- 中断处理程序 --------------------
; 根据逻辑扇区号算出物理编号
; -------------------------------------------------------
; 参数:dx = 逻辑扇区号
; 返回:dh = 面号 	01
; 返回:ch = 磁道号 06
; 返回:cl = 扇区号 109
; -------------------------------------------------------
logical2physical:
		jmp short l2ph_start
		hts dw 1440, 18
l2ph_start: 
		push ax		; 备份寄存器
		push bx
		
		mov ax,dx
		mov dx,0
		; 逻辑扇区号 / 1440:商ax = 面号,余数dx拿去算:磁道号、扇区号
		div word ptr hts[0]	; 除以 1440
		mov bx,ax	; 面号(临时保存)
		
		; dx / 18:商al = 磁道号,余数ah + 1 = 扇区号
		mov ax,dx
		div byte ptr hts[2]	; 除以 18
	
		mov ch,al	; 磁道号
		inc ah
		mov cl,ah	; 扇区号
		mov dh,bl	; 面号
		
		pop bx		; 还原寄存器
		pop ax
		ret 		; 返回原程序
; --------------------- 中断处理程序 --------------------
; =======================================================

   i7chend:	nop
code ends
end start

测试程序

assume cs:code
data segment
	arr db 4000 dup(0)
data ends

code segment
 start: 
		mov ax,data
		mov es,ax
		mov bx,offset arr
		mov ah,0
		mov dx,0
		int 7ch
		
	ok:	mov ax,4c00h
		int 21h
code ends
end start

效果

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

DOSBox
在这里插入图片描述

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

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

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

相关文章

【PCIe 链路训练】之均衡(equalization)

1、概述 这篇文章简单介绍一下PCIE phy的均衡原理和过程,USB phy,ethernet phy这些高速的串行serdes也有相同或者相似的结构。可以不用太关注其中的细节,等到debug的时候可以查询协议,但是需要了解这个故事讲的大概内容。整个equalization过程是controller和phy一起配合完成…

喜报|炼石免改造数据安全入选上海网安产业创新大会优秀案例

近日&#xff0c;上海网络安全产业创新大会隆重召开&#xff0c;上海普陀区委副书记、区长肖文高&#xff0c;上海市经济和信息化委员会总工程师葛东波出席并致辞&#xff0c;普陀区副区长肖立出席。大会以“产业赋能、生态打造”为主题&#xff0c;为发掘数据安全领域的优秀产…

【代码随想录算法训练营Day29】 491.递增子序列;46.全排列;47.全排列 II

文章目录 ❇️Day 29 第七章 回溯算法 part05✴️今日内容❇️491.递增子序列自己的思路随想录思路自己的代码 ❇️46.全排列思路代码流程 ❇️47.全排列 II思路代码 ❇️Day 29 第七章 回溯算法 part05 ✴️今日内容 491.递增子序列46.全排列47.全排列 II ❇️491.递增子序…

低压MOS在步进电机驱动器上的应用-REASUNOS瑞森半导体

一、前言 步进电机驱动器是一种用于控制步进电机运动的装置&#xff0c;它是将控制信号转换成步进电机可以识别的控制电压或电流的电路。它在工业自动化领域有着广泛的应用&#xff0c;如机器人、印刷机、木工机床、喷绘机等。步进电机驱动器的组成结构主要由以下部分&#xf…

《C缺陷和陷阱》-笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、理解函数声明 1.(*(void(*)( ))0)( ); 2.signal 函数接受两个参数&#xff1a; 3.使用typedef 简化函数声明&#xff1a; 二、运算符的优先级…

面试经典150题【61-70】

文章目录 面试经典150题【61-70】61.旋转链表86.分隔链表104. 二叉树的最大深度100.相同的树226.翻转二叉树101.对称二叉树105.从前序与中序遍历序列构造二叉树106.从后序和中序遍历序列构造二叉树117.填充每个节点的下一个右侧节点指针II114.二叉树展开为链表 面试经典150题【…

修复 因 fstab 中UUID 错误导致系统无法正常工作的问题

操作系统&#xff1a; PVE 8.0 /debian 12 &#xff08;bookworm&#xff09; 问题症状&#xff1a;可以正常启动进入系统&#xff0c;但是系统盘以只读方式挂载 问题原因&#xff1a;/etc/fstab 中引导区的UUID 被错误修改导致 解决方法&#xff1a; 重启系统&#xff0c;在…

QT:用opencv的KNN识别图片中的LED数字(一)

前言 一款功能测试的软件demo,使用了QT作为界面,主要使用了opencv的KNN识别,使用gstreamer作为管道,用来打开图片。后期会写一篇打开摄像头实时识别的文章。 (正在写,未完成,稍候) 效果一预览: 效果二预览: 效果三预览: 正在写。。。 设计思路 1. 软件UI设…

吴恩达深度学习笔记:深度学习引言1.1-1.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第一周&#xff1a;深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络&#xff1f;(What is a Neural Network)1.3 神经网络的监督学习(Supervised Learning …

【C++】C++模板基础知识篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化…

Trans论文复现:考虑源荷不平衡性的微电网鲁棒定价方法程序代码!

适用平台&#xff1a;MatlabYalmipCplex/Gurobi 程序针对目前微电网中高比例新能源发电的波动性和间歇性&#xff0c;提出了考虑源荷不平衡特性的微电网鲁棒定价方法&#xff0c;综合考虑电力市场边际收益和边际成本&#xff0c;利用价格波动来平衡电源和负荷。程序算例丰富、注…

腾讯云轻量 2核2G4M新用户首购活动,99续费同价来了!!

阿里云199一年续费同价&#xff0c;腾讯云99一年续费同价&#xff0c;平台卷起来&#xff0c;对用户的角度来说&#xff0c;真的是香麻了~ 腾讯云新春采购节&#xff0c;2核2G4兆的基础配置&#xff0c;新官方直接放大招&#xff0c;99一年&#xff0c;活动期间内&#xff0c;…

EXSI create datastore

文章目录 1. 简介2. 清空磁盘3. 删除表4. 创建database 1. 简介 在 ESXi 环境中创建数据存储(Datastore)的步骤如下: 登录 vSphere Web Client 打开 Web 浏览器,输入 ESXi 主机或 vCenter Server 的 IP 地址,使用有权限的账户登录。 在 ESXi 环境中创建数据存储(Datastore)…

二、TensorFlow结构分析(4)

TF数据流图图与TensorBoard会话张量Tensor变量OP高级API 目录 1、变量 2、高级API 1、变量 2、高级API

【Kafka系列 07】Kafka 如何保证消息不丢失

一、Kafka 消息不丢失的边界 一直以来&#xff0c;很多人对于 Kafka 丢失消息这件事情都有着自己的理解&#xff0c;因而也就有着自己的解决之道。在讨论具体的应对方法之前&#xff0c;我觉得我们首先要明确&#xff0c;在 Kafka 的世界里什么才算是消息丢失&#xff0c;或者…

华为云开年采购季Web及移动App上云体验,助力软件行业创新发展

随着云化、智能化浪潮的进一步深入&#xff0c;越来越多的应用软件开发商选择将核心产品从本地IDC机房搬迁到公有云上。但同时&#xff0c;软件开发商们也非常在意公有云厂商的可靠性与安全性&#xff0c;希望能够选择一家更加稳定可靠的云服务商&#xff0c;确保自身业务的连续…

02极简LLM逻辑与PyTorch快速入门

文章目录 02极简LLM逻辑与PyTorch快速入门极简LLM逻辑PyTorch环境安装&#xff08;重要&#xff0c;不难&#xff09;PyTorch 主要概念Tensors张量张量常见的形式&#xff1a;scalar、vector、matrix、n-dimensinal张量初始化张量参数&#xff1a;shape、datatype、device张量运…

从huggingface下载模型像本地加载但是UnicodeDecodeError

我自己是在Linux下出现了这个问题 原文&#xff1a;https://github.com/huggingface/transformers/issues/13674 The path for the AutoModel should be to a directory pointing to a pytorch_model.bin and to a config.json. Since you’re pointing to the .bin file dire…

论文笔记:Efficient Bootstrapping for Confidential Transactions

EcoBoost: Efficient Bootstrapping for Confidential Transactions 设计了一种被称为EcoBoost的新方法&#xff0c;以提高支持机密交易的区块链的引导效率。具体来说&#xff0c;利用随机抽样来验证高概率保密交易的正确性。因此&#xff0c;与事务数量相比**&#xff0c;验证…

Promise async await

简介&#xff1a;回调 JS会提供很多函数&#xff0c;允许异步行为。换句话说&#xff0c;现在开始执行的行为。但它们会在稍后完成。异步执行某项功能的函数应该提供一个 callback 参数用于在相应事件完成时调用。处理Error&#xff1a; 加载成功时&#xff0c;它会调用 callb…