第16章 直接定址表

《汇编语言》学习(十六)直接定址表 本文主要介绍直接定址表。 一、地址标号和数据标号 1,地址标号     前面各章节中,在代码段中,经常会用到各种标号,有些表示指令的起始地址,有些表示数据的起始地址。这种只在代码段中使用的,形如“s:***”的标号,被称为“地址标号”。     地址标号表示代码段中的指令或数据的起始(偏移地址),对地址标号的调用(call),经过编译器后,会转换为偏移地址。注意,如果直接进行运行,需要使用 阅读详情

16.1 描述了单元长度的标号

assume cs:code
code segment
a db 1,2,3,4,5,6,7,8
b dw 0
start: mov si,0
     mov cx,0
s:   mov al,a[si]
     mov ah,0
     add b,ax
     inc si
     loop s
     mov ax,4c00h
     int 21h
code ends
end start

    在code段中使用的标号a、b后面没有“:”,它们是同时描述内存地址和单元长度的标号。因为这种标号包含了对单元长度的描述,所以在指令中,它可以代表一个段中的内存单元。

比如,对于程序中的“b dw 0”:
指令:mov ax,b
相当于:mov ax,cs:[8]
下面的指令会引起编译错误:
mov al,b
因为b代表的内存单元是字单元,而al是8位寄存器

    使用这种包含单元长度的标号,可以使我们以简洁的形式访问内存中的数据。这种标号称为 数据标号,它标记了存储数据的单元地址和长度。它不同于仅仅表示地址的 地址标号


我自己对数据标号、地址标号、offset、seg的总结
(1)之前见到的标号都是地址标号,代表内存单元的地址;这章学到的数据标号,不仅代表内存单元地址, 还代表了此地址处数据的单元长度。
(2)本书中谈到内存单元地址可以拆分成 段地址:偏移地址,第9章学到的伪指令 “offset 标号”,就是 获得标号处的内存单元的偏移地址;下一小节学到的 “seg 标号” 操作符,就是 获得标号处的段地址。
(3)在分析“seg”标号时,我总是纠结seg操作符怎么从标号中得到段地址的。后来我想明白了,我从了解到offset伪指令开始,到现在所写的检测点、每章的实验的代码,都把标号当作偏移地址用。 其实标号代表的是内存单元的地址,包括了段地址和偏移地址。只有“offset 标号”,得到的才是偏移地址。 学了这章之后还要注意:地址标号和数据标号的区别。


16.2 在其它段中使用数据标号

    一般来说,我们不在代码段中定义数据,而是将数据定义到其它段中。在其它段中,我们也可以使用数据标号来描述存储数据的单元的地址和长度。注意,在后面加有“:”的地址标号,只能在代码段中使用,不能在其它段中使用。

    如果想在代码段中直接使用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来。否则编译器在编译的时候,无法确定标号的段地址在哪个寄存器中。当然,这种联系是编译器需要的,但决定不是说,我们用assume指令将段寄存器和某个段相联系,段寄存器中就会真的存放该段的地址。 我们在程序中还要使用指令对寄存器进行设置。

    可以将标号当作数据来定义,此时,编译器将标号所表示的地址当作数据值。

data segment
    a db 1,2,3,4,5,6,7.8
    b dw 0
    c dw a,b
    d dd a,b
data ends
数据标号c处存储的两个字型数据为标号a、b的偏移地址
数据标号d处存储的两个双字型数据为标号a的偏移地址和段地址、标号b的偏移地址和段地址
上面因为dw和dd的不同得到不同的地址要细细体会

seg操作符,功能为取得某一标号的段地址。 参考offset




16.3 直接定址表

    可以通过依据数据,直接计算出所要找的元素的位置的表,我们称其为**直接定址表**。


    结合我以前学习C语言指针的知识,我对这小节的理解就是:合理的利用资源建立映射关系,方便我们查找数据。
    要注意利用数据标号访问数据时,虽然数据标号包含数据的单元长度,但偏移的计算还是以字节为单位。
水平有限,个人代码仅供参考:(比书中代码,附加了判断角度值是否在范围内)

assume cs:code,ds:data

data segment
	tableAg	db 0,30,60,90,120,150,180
	table	dw ag0,ag30,ag60,ag90,ag120,ag150,ag180
	string	db 'The angle is not in the range !',0
	ag0	db '0',0
	ag30	db '0.5',0
	ag60	db '0.866',0
	ag90	db '1',0
	ag120	db '0.866',0
	ag150	db '0.5',0
	ag180	db '0',0
data ends

code segment
start:
				mov ax,data
				mov ds,ax

				mov al,91				;输入角度
				call jdgAgl				;判断输入角度是否在能显示的范围内
				call getVal				;显示角度对应的sin值

				mov ax,4c00h
				int 21h
;功能:判断输入的角度数是否在tableAg的范围内,如果不在屏幕就显示“The angle is not in the range!”
;参数:al=输入的角度
;返回:无
jdgAgl:
				push si
				push cx
				push ax
				push ds
				push si

				mov si,0
				mov cx,7
		cycJdg:		cmp al,tableAg[si]			;循环判断输入的角度,是否在范围内
				je endJdg
				inc si
				loop cycJdg
				mov ax,data
				mov ds,ax
				mov si,offset string
				call showStr
				jmp reDos

		endJdg:		pop si					;角度判断通过,返回程序,继续运行
				pop ds
				pop ax
				pop cx
				pop si
				ret

		reDos:		mov ax,4c00h				;角度判断不通过,结束程序返回dos系统
				int 21h

;功能:根据输入角度得到对应的sin值
;参数:al=输入角度
;返回:无
getVal:
				push ax
				push bx
				push si

				mov ah,0
				mov bl,30
				div bl					;根据输入角度计算表中的索引
				mov bl,al
				mov bh,0
				add bx,bx				;根据表中数据单元的长度(byte/word/dword)来调整访问表的索引
				mov si,table[bx]			
				mov ax,data
				mov ds,ax
				call showStr

				pop si
				pop bx
				pop ax
				ret

;功能:显示指定地址处以0结尾的字符串
;参数:ds=字符串的段地址 si=字符串偏移地址
;参数:无
showStr:			
				push ax
				push es
				push di
				push si

				mov ax,0b800h
				mov es,ax
				mov di,12*160+30*2		;es:di指向显存中显示字符串的首地址

		cycSh:		mov al,[si]			;显示字符串
				cmp al,0
				je endCyc			;遇到字符串结尾的0,结束循环
				mov es:[di],al
				inc si
				add di,2
				jmp short cycSh

		endCyc:		pop si
				pop di
				pop es
				pop ax
				ret
	
code ends

end start



16.4 程序入口地址的直接定址表


    如果你理解了直接定址表,那这小节没什么新内容,核心还是不变的,你只要设计好数值和表之间的映射关系。

水平有限,个人代码仅供参考:(比书中代码,增加了一个对颜色值范围的判断)

assume cs:code,ds:data

data segment
	tabCol	db 0,1,2,3,4,5,6,7
	string	db 'the color is not in the range!',0
data ends

code segment
			table	dw clScreen,setFroCol,setBacCol,upRoll
start:				mov ax,data
				mov ds,ax
				mov ax,0b800h
				mov es,ax
				
				mov ah,0					;选择功能
				mov bl,ah
				mov bh,0
				add bx,bx
				mov al,4					;传递颜色值
				mov ah,0
				call word ptr table[bx]
				mov ax,4c00h
				int 21h

;功能:清屏
;参数:es=显存段地址
;返回:无
clScreen:
				push cx
				push di

				mov cx,2000
				mov di,0
		cycCl:		mov byte ptr es:[di],' '
				add di,2
				loop cycCl

				pop di
				pop cx
				ret

;功能:设置前景色
;参数:es=显存段地址 al=前景色  范围0~7
;返回:无
setFroCol:
				push cx
				push ax
				push di

				call jdgCol					;判断al的值在不在允许范围内

				mov cx,2000					;准备设置前景色
				mov di,1
		cycSfr:		and byte ptr es:[di],11111000b			;循环设置前景色
				or es:[di],al
				add di,2
				loop cycSfr

				pop di
				pop ax
				pop cx
				ret
				
;功能:设置背景色
;参数:es=显存段地址 al=前景色  范围0~7
;返回:无
setBacCol:
				push cx
				push ax
				push di

				call jdgCol					;判断al的值在不在允许范围内

				mov cl,4
				shl al,cl					;左移,将颜色值移动到背景色的位置

				mov cx,2000					;准备设置背景色
				mov di,1
		cycSba:		and byte ptr es:[di],10001111b			;循环设置背景色
				or es:[di],al					
				add di,2
				loop cycSba

				pop di
				pop ax
				pop cx
				ret

;功能:向上滚动一行
;参数:无
;返回:无
upRoll:
				push ax
				push ds
				push es
				push si
				push di
				push cx

				mov ax,0b800h
				mov ds,ax
				mov es,ax

				mov si,160	
				mov di,0
		cycRo:		mov cx,80
				cld
				rep movsw
				cmp si,4000
				jne cycRo

				mov cx,80
				mov si,0
		laRow:		mov byte ptr es:[160*24+si],' '				;最后一行设为空
				add si,2
				loop laRow

				pop cx
				pop di
				pop si
				pop es
				pop ds
				pop ax
				ret
;功能:显示指定地址处以0结尾的字符串
;参数:ds=字符串的段地址 si=字符串偏移地址
;参数:无
showStr:			
				push ax
				push es
				push di
				push si

				mov ax,0b800h
				mov es,ax
				mov di,12*160+30*2		;es:di指向显存中显示字符串的首地址

		cycSh:		mov al,[si]			;显示字符串
				cmp al,0
				je endCyc			;遇到字符串结尾的0,结束循环
				mov es:[di],al
				inc si
				add di,2
				jmp short cycSh

		endCyc:		pop si
				pop di
				pop es
				pop ax
				ret

;功能:判断输入的颜色值是否在给定的范围内
;参数:al=输入的颜色值
;返回:无
jdgCol:
				push si
				push cx
				push ax

				mov si,0
				mov cx,8
		cycJdg:		cmp al,tabCol[si]				;判断al中前景色值在不在允许的范围内
				je endJdg
				inc si
				loop cycJdg
				mov si,offset string
				call showStr

				mov ax,4c00h					;如果输入的颜色值不在允许的范围内,直接结束程序
				int 21h

		endJdg:		pop ax
				pop cx
				pop si
				ret

code ends

end start



实验16 编写包含多个功能子程序的中断例程

    这个实验的重点要关注,中断例程安装完成后,中断例程调用其它子程序时,地址的设置。在安装程序中,中断例程不会执行,安装程序中所有对内存访问的地址基础,是安装程序所在的地址空间,这个空间是DOS系统分配的;安装完成后,中断例程对内存访问的地址基础,是安装的位置。我的实验里中断例程安装在0000:0200处,所以中断例程中代码访问内存的地址基础就是0000:0200。这里的区别要注意,要仔细体会,如果你之前了解过高级语言关于“与位置无关代码”的介绍,那理解很容易。

水平有限,个人代码仅供参考:(代码内不包含,测试部分,有兴趣的安装完中断例程,自己写个单独的测试文件,我已测试通过)

assume cs:code

code segment
;安装程序,将中断例程安装到0000:0200处
start:				mov ax,cs
				mov ds,ax
				mov si,offset int7c
				mov ax,0
				mov es,ax
				mov di,0200h
				mov cx,offset int7cE-offset int7c
				cld
				rep movsb

;修改中断向量表,使int 7c指向新中断例程
				cli
				mov ax,0
				mov es,ax
				mov word ptr es:[7ch*4],0200h
				mov word ptr es:[7ch*4+2],0
				sti

				mov ax,4c00h
				int 21h
;中断例程
int7c:				push ax
				push es
				push bx
				jmp short begi

			table	dw offset clScreen-offset int7c+0200h,offset setFroCol-offset int7c+0200h,offset setBacCol-offset int7c+0200h,offset upRoll-offset int7c+0200h
			tabCol	db 0,1,2,3,4,5,6,7
			string	db 'the color is not in the range!',0
begi:				push ax
				mov ax,0b800h
				mov es,ax
				pop ax
				mov bl,ah				;功能号
				mov bh,0
				add bx,bx	
				call word ptr cs:[offset table-offset int7c+0200h+bx]
				
				pop bx
				pop es
				pop ax
				iret

clScreen:								;清屏
				push cx
				push di

				mov cx,2000
				mov di,0
		cycCl:		mov byte ptr es:[di],' '
				add di,2
				loop cycCl

				pop di
				pop cx
				ret

setFroCol:								;设置前景色
				push cx
				push ax
				push di

				call jdgCol					;判断al的值在不在允许范围内

				mov cx,2000					;准备设置前景色
				mov di,1
		cycSfr:		and byte ptr es:[di],11111000b			;循环设置前景色
				or es:[di],al
				add di,2
				loop cycSfr

				pop di
				pop ax
				pop cx
				ret

setBacCol:								;设置背景色
				push cx
				push ax
				push di

				call jdgCol					;判断al的值在不在允许范围内

				mov cl,4
				shl al,cl					;左移,将颜色值移动到背景色的位置

				mov cx,2000					;准备设置背景色
				mov di,1
		cycSba:		and byte ptr es:[di],10001111b			;循环设置背景色
				or es:[di],al					
				add di,2
				loop cycSba

				pop di
				pop ax
				pop cx
				ret

upRoll:									;向上滚动
				push ax
				push ds
				push si
				push di
				push cx

				mov ax,0b800h
				mov ds,ax

				mov si,160	
				mov di,0
		cycRo:		mov cx,80
				cld
				rep movsw
				cmp si,4000
				jne cycRo

				mov cx,80
				mov si,0
		laRow:		mov byte ptr es:[160*24+si],' '				;最后一行设为空
				add si,2
				loop laRow

				pop cx
				pop di
				pop si
				pop ds
				pop ax
				ret

showStr:							;显示字符串	
				push ax
				push di
				push si

				mov di,12*160+30*2		;es:di指向显存中显示字符串的首地址

		cycSh:		mov al,[si]			;显示字符串
				cmp al,0
				je endCyc			;遇到字符串结尾的0,结束循环
				mov es:[di],al
				inc si
				add di,2
				jmp short cycSh

		endCyc:		pop si
				pop di
				pop ax
				ret

jdgCol:								;判断颜色值是否在范围内
				push si
				push cx
				push ax

				mov si,0
				mov cx,8
		cycJdg:		cmp al,cs:[offset tabcol-offset int7c+200h+si]				;判断al中前景色值在不在允许的范围内
				je endJdg
				inc si
				loop cycJdg
				mov si,offset string-offset int7c+200h
				call showStr

				mov ax,4c00h					;如果输入的颜色值不在允许的范围内,直接结束程序
				int 21h

		endJdg:		pop ax
				pop cx
				pop si
				ret
int7cE:				nop
code ends
end start
OpenClaw 完整部署教程 版本:OpenClaw 2026.2.13更新日期:2026-02-26适用系统:Linux (Ubuntu/Debian/CentOS) 阅读详情

相关推荐

dreamerv3复现教程

由于dreamerv3存在很多版本冲突问题,所以很难直接使用和复现。

无人机飞啊飞啊飞 2809

【汇编语言】直接定址表

在本篇文章中我们将讲到,移位指令,操作显存数据,操作内存单元的称号,数据的直接定址表,代码的直接定址表。

2301_80035097的博客 1814

Ubuntu20.04安装Torque-6.1.2单机版(踩坑篇)

说明:PBS排队系统原先是在Centos7安装使用很顺利,但是有客户需求在Ubuntu20.04上使用,着手在Ubuntu20.04安装上安装的时候发现很多报错,并不能顺利安装,网上查找到的教程,有的说是让放弃转slurm,有的是换源安装,但是安装好的版本很低,有许多bug,不是很好用。经过自己慢慢摸索之后,改了部分配置以及源码之后,能够顺利安装,再次记录一下踩坑心得,与大家一起分享学习。如有问题,欢迎大家来撩。...............

华青水上的博客 8080

直接定址表

一、单元长度的标号 之前的课程中,我们一直在代码段中使用标号来标记指令、数据、段的起始地址。比如,下面的程序 将code段中的a标号处的8个数据累加,结果存储到b标号处的字中。 assume cs:code code segment a: db 1,2,3,4,5,6,7,8 b: dw 0 start:mov si,offset a mov bx,offset ...

流彩飞霞的专栏 637

卫星图像检测,分割,跟踪,超分辨率,数据集调研,以及论文笔记

目标检测,针对物体有很多类如桥,烟囱,罐子等,有静态图像下的检测,也就是图像源头多来自谷歌地图,但是前后帧没有任何联系,并且谷歌地图相对来说比较清楚,难度小一点,也有粗粒度以及较细粒度的检测,然后卫星视频的数据集较少,则可以通过前后帧的联系来辅助检测,并且卫星帧基本上只对车,船,飞机,火车进行检测,没有进行细粒度的检测即将车辆分类为卡车,皮卡,小轿车,但是关船,则可以分类为货船以及军舰,因为目前的卫星视频中小车实在太少了,难以进行更细粒度的检测。luojia 三号卫星。

zhangzhao147的博客 4692

同花顺PC端逆向解析:Hook注入与加密破解实战指南

在Windows客户端数据采集场景中,当常规HTTP爬虫失效时,内存级逆向分析成为获取实时行情数据的关键路径。其核心涉及进程注入、运行时解密、反调试绕过等底层技术,本质是理解PE加载机制、函数调用约定与内存保护策略的协同过程。同花顺作为典型加固客户端,采用ASPack加壳+自研解密+多线程校验三重防护,迫使开发者转向APC注入、动态密钥提取与XXTEA算法复刻等高阶手段。本文聚焦于DLL注入选型依据、解密函数定位方法及二进制Blob结构化解析,最终实现从内存读取到Pandas DataFrame的端到端数据

weixin_32234493的博客 1170

【汇编语言】直接定址表(一)—— 「从单元标号到跨段数据:解锁汇编语言的隐藏技巧」

该文主要介绍汇编语言中的标号,包括单元长度标号、数据标号及其在不同段中的使用,还有相关操作符及注意事项。

2301_80191662的博客 2041

Python 爬虫实战:Steam 游戏数据爬取与游戏市场分析

本文介绍了一个基于Python的Steam游戏数据分析项目。通过爬取Steam公开API和游戏详情页,获取游戏列表、价格、评价、标签等数据,结合SteamSpy统计销量和在线人数。项目使用requests、BeautifulSoup4进行数据采集,pandas处理数据,pyecharts和seaborn进行可视化。核心步骤包括:1)获取全量游戏列表并过滤;2)异步请求游戏详情处理限速;3)提取关键字段如价格、评分、标签;4)多维分析价格分布、标签热度等。技术栈涵盖API请求、HTML解析、数据存储与可视化,

u014481728的博客 293

汇编语言 第十六章 直接定址表 小白笔记

仅仅在assume中将段和寄存器联系起来不能真正联系起来,要想联系还要用mov将寄存器和段地址联系起来。还可以将标号当作数据,这个时候如果标号前是dw就代表标号对应的偏移地址,如果是dd就代表偏移地址和段地址。我们称它为数据标号(在他的后边一定要有数据类型,dd、dw、db等)1、2号功能al传递颜色al=(0,1,2,3,4,5,6,7)有“:”的地址标号只能在代码段中使用,不能在其他段中使用。16进制和2进制的关系是:四位二进制用一位16进制表示。此时标号名称代表的意义包含数据长度和数据地址。

小白垃圾笔记2 344

YOLOv11 结合 BiFormer 注意力:打造多场景高精度检测模型实战教程

注册BiFormer模块(若代码未自动注册)# 加载自定义配置的YOLOv11模型。

know_F0727的博客 245

33、嵌入式系统中的内存操作与实时操作系统

本博客详细探讨了嵌入式系统中的内存操作和实时操作系统(RTOS)的基本原理及应用。内容涵盖C、C++和MicroPython三种语言下的SDRAM读写示例,并结合机器人真空吸尘器的实际应用说明内存的使用场景。此外,还介绍了RTOS的核心概念、组件及其工作机制,包括任务、事件、互斥锁、信号量、队列等,并以FreeRTOS和Mbed OS为例展示了RTOS的配置与使用方法。最后,通过常见问题和实践项目加深对嵌入式系统开发的理解。

zz67890的博客 136

《汇编语言》- 读书笔记 - 第16章-直接定址表

这是《汇编语言》第16章读书笔记,探讨了汇编语言中的直接定址表,一种通过索引快速访问特定数据元素的方法。文章通过实例解释了直接定址表的优势,如快速访问、简单实现和内存预分配。同时,介绍了数据标号的使用和跨段访问数据的方法。最后,通过编写中断例程的实验,加深了对直接定址表应用的理解。

灵台方寸山斜月三星洞 1483

Ubuntu Rtx3090 Cuda11.7 安装 pytorch3d

pytorch ubuntu pytorch3d 安装

G果的博客 2262

《汇编语言》第16章 直接定址表

这一章,我们讨论如何有效合理地组织数据,以及相关的编程技术。

chenyijun的专栏 1214

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【笔记】【汇编语言】第16章 直接定址表

16.0 概述 本章讨论如何有效合理地组织数据,以及相关的编程技术. 16.1 描述了单元长度的标号 标号后面不加":",便是同时描述内存地址和单元长度的标号. 使用这种标号可以使我们以简洁的形式访问内存中的数据,我们称其为>>>>数据标号<<<<,以区别于原来的>>>>地址标号<<<&lt...

dengkenglu1416的博客 216

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

汇编语言_第16章 直接定址表

16.1 描述了单元长度的标号 数据标号:它标记了存储数据的单元的地址和长度。 16.2 在其他段中使用数据标号 在其他段中,也可以使用数据标号来描述存储数据的单元的地址和长度。 注意:在后面加油“:”的地址标号,只能在代码段中使用,不能在其他段中使用。 如果想在代码段中直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个寄存器联系起来。否则编译器在编译的时候,无法确...

madao1234的博客 423

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

汇编语言 | 第16章 直接定址表(含检测点16.1 16.2)

文章目录16.1 描述了单元长度的标号检测点16.116.2 在其他段中使用数据标号检测点16.216.3 直接定址表 16.1 描述了单元长度的标号 前面的课程中,我们一直在代码段中使用标号来标记指令、数据、段的起始地址。比如,下面的程序将code段中的a标号处的8个数据累加,结果存储到b标号处的字中。 assume cs:code code segment a db 1,2,3,4,5,6,7,8 b dw 0 start: mov si,0 mov cx,8 s: mov al,

Kni9hT's Blog 986

第16章 直接定址表 笔记

P289 数据标号标记了存储数据的单元的地址和长度。它不同于仅仅表示地址的地址标号。P290 注意:在后面加有":"的地址标号,只能在代码段中使用,不能在其它段中使用。P295 在上面的两个子程序中,我们将 通过给出的数据进行计算或比较而得到结果的问题,转化为用给出的数据作为查表的数据,通过查表得到问题的结果。具体的查表方法,是用查表的依据数据,直接计算出所要查找的元素在表中的位置。像这种可以通过依据数据,直接计算出所要找的元素的位置的表,我们称其为:直接定址表。P299 实验16 编写包含多个功能子程序的

canmeng50401的专栏 663

《汇编语言》第16章 -直接定址表

检测点16.1 将code段中a处的8个数据累加,结果存储到b处的双字中; assume cs:code code segment a dw 1,2,3,4,5,6,7,8 b dd 0 start: mov si,0 mov cx,8 s: mov ax,a[si] add b[0],ax adc b[1],0 add si,2 loop s mov ax,4c00h int 21h cod...

Impt_gofly的博客 301

汇编语言-第三版-王爽-第15章 外中断-第16章 直接定址表

P280:在屏幕中间依次显示a~z, 显示过程中,按下ESC键后,改变显示颜色 P283:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理 P293:以十六进制的形式显示给定的字节型数据 P295:计算sin(x) x=0 30 60 90 120 150 180 * * * * * * * * * * * * * * * * * * * * * * * * * * * * ...

trb331617的博客 295

汇编语言(王爽)16章直接定址表和查询部分度数的sin值

a=ds:[si],那么a[sp]=ds:[si+sp] dw a,b=dw offset a,offset b a,b=dw offset a,seg a,offset b,seg b assume cs:code,ds:data ;ds=076a data segment db 9,9,9,9 ;09 09 09 09 a dw 1234h,2345h ;34 12 ...

weixin_43292547的博客 369

《汇编语言》第16章 直接定址表——实验16 编写包含多个功能子程序的中断例程

本篇是第16章 直接定址表——实验16 编写包含多个功能子程序的中断例程 安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序。 (1)清屏;(2)设置前景色;(3)设置背景色;(4) 向上滚动一行。 入口参数说明如下。 (1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行; (2)对于1、2号功能,用al传送颜色值,(al)={0,1,2,3,4,5,6,7}。

chenyijun的专栏 244

《汇编语言》_王爽 第16章 直接定址表 实验16_编写包含多个功能子程序的中断例程_安装一个新的int 7ch中断例程提供清屏设置前景色设置背景色向上滚动一行的功能_作业

注:由于(al)∈{0,1,2,3,4,5,6,7},因此,如果是设置背景色,就要先把字属性的内存值跟10001111b进行and运算(清除背景色),再把al左移4位,然后跟它进行or运算(设置背景色)1、用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行。2、对于1、2号功能,用al传送颜色值,(al)∈{0,1,2,3,4,5,6,7}or byte ptr es:[bx],al;

深耕计算机专业知识与技术。 893
上一篇: 第15章 外中断
下一篇: 第17章 使用BIOS进行键盘输入和磁盘读写
追逐~chase
博客等级 码龄15年 245粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值