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

罗湖网站设计甘肃 网站备案

罗湖网站设计,甘肃 网站备案,制作公众号开发公司,软件工程的就业方向《汇编语言》- 读书笔记 - 第16章-直接定址表 16.1 描述了单元长度的标号#xff08;数据标号#xff09;检测点 16.1 16.2 在其他段中使用数据标号assume通过标号取地址检测点 16.2 16.3 直接定址表#xff08;Direct Addressing Table#xff09;例1分析代码效果 例2分析… 《汇编语言》- 读书笔记 - 第16章-直接定址表 16.1 描述了单元长度的标号数据标号检测点 16.1 16.2 在其他段中使用数据标号assume通过标号取地址检测点 16.2 16.3 直接定址表Direct Addressing Table例1分析代码效果 例2分析代码效果 16.4 程序入口地址的直接定址表实验 16 编写包含多个功能子程序的中断例程 16.1 描述了单元长度的标号数据标号 数据标号可以表示地址 和 长度。更简洁的访问内存中的数据。数据标号是有长度的。所以它只能与长度类型匹配的寄存器搭配使用。 3.1. 8位的数据对8位的寄存器 3.2. 16位的数据对16位的寄存器 标号格式可用位置表示普通标号 带冒号代码段地址数据标号不带冒号代码段、数据段地址、长度 assume cs:code code segmenta db 1,2,3,4,5,6,7,8b dw 0... code ends end start标号b代表了一个内存单元地址为 code:8长度为word两字节。 -内存➡️ ax立即数➡️内存内存自增指令mov ax,bmov b,2inc b相当于mov ax,cs:[8]mov word ptr cs:[8],2inc word ptr cs:[8] 标号a db 1,2,3,4,5,6,7,8代表了一组字节内存单元 -内存[si]➡️al内存[立即数]➡️al内存[bxsi立即数]➡️al指令mov al,a[si]mov al,a[3]mov al,a[bxsi3]相当于mov al,cs:0[si]mov al,cs:0[3]mov al,cs:0[bxsi3] 检测点 16.1 《汇编语言》- 读书笔记 - 各章检测点归档 - 检测点 16.1 16.2 在其他段中使用数据标号 assume 通常我们不在代码段中定义数据。 通常在数据段定义数据为了在代码段中直接使用数据标号访问数据 我们需要为编译器使用伪指令assume将标号所在段与一个段寄存器关联起来。 这个关联是给编译器看的。DS还是需要我们自己设置 assume cs:code,ds:data data segmenta dw 1,2,3,4,5,6,7,8 data endscode segmentstart: mov ax,datamov ds,axmov ax,a[0]mov ax,4c00hint 21h code ends end startassume ds:data 和 assume es:data 对于访问内存 [] 会得到不同的段地址 通过标号取地址 可以将标号当作数据用此时编译器视其地址为值。 是取 偏移地址 还是 偏移地址和段地址 取决于数据的类型 偏移地址 C的类型为 dw 字就只取偏移地址 data segmenta db 1,2,3,4,5,6,7,8b dw 0c dw a,b ; 相当于c dw offset a offset b data ends偏移地址 段地址 C的类型为 dd 双字就要取偏移地址和段地址 data segmenta db 1,2,3,4,5,6,7,8b dw 0c dd a,b ; 相当于c dw offset a,seg a,offset b,seg b data ends检测点 16.2 《汇编语言》- 读书笔记 - 各章检测点归档 - 检测点 16.2 16.3 直接定址表Direct Addressing Table 在8086汇编语言中直接定址表通常用于存储一系列数据并允许程序通过索引直接访问表中的特定元素。 是常用的空间换时间算法适用于键的数量相对固定且不会频繁变化的情况。 直接定址表的好处包括 快速访问由于键直接映射到地址因此访问速度非常快几乎没有延迟。简单性实现直接定址表的算法相对简单容易理解和维护。预分配内存在创建直接定址表时可以根据预计的键数量预先分配足够的内存空间避免了动态分配内存的开销。 例1 以十六进制的形式在屏幕中间显示给定的字节型数据。 分析 每个字节可分为高低两个4位。每4位对应一个十六进制数。 如果每4位取出来 30h转ascii 就挺麻烦 不如直接用数值当索引去一块内存中直接取对应字符。 用直接定址表算法更清晰和简洁 代码 assume cs:code code segmentstart: mov al,0F1hcall showbytemov ax,4c00hint 21hshowbyte:jmp short showtable db 0123456789ABCDEF ;字符表show:push bxpush esmov bx,0b800h ; 设置显存段mov es,bxmov ah,alshr ah,1shr ah,1shr ah,1shr ah,1 ;右移4位ah 保留高4位的值and al,00001111b ;高4位置0a1 保留低4位的值mov bl,ahmov bh,0mov ah,table[bx] ;高4位的值当索引取得对应的字符mov es:[160*1240*2],ahmov bl,almov bh,0mov al,table[bx] ;低4位的值当索引取得对应的字符mov es:[160*1240*22],alpop espop bxretcode ends end start效果 例2 编写一个子程序计算 sim(x)x ∈ { 0°30°60°90°120°150°180}并在屏幕中间显示计算结果。比如 sin(30) 的结果显示为“0.5” 分析 用直接定址表算法提高算法性能。 table 类型是 dw -ag0ag30ag60ag90ag120ag150ag180值00.50.86610.8660.50索引角度/300123456位置1B~1C1D~2021~2627~2829~2E2F~3233~34长度字节2462642 代码 assume cs:code code segmentstart: mov ax,120call showsinmov ax,4c00hint 21hshowsin: ; 位 置 机器码 反汇编jmp short show ; cs:0B EB28 jmp 0035; table table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180 ;字符串偏移地址表 cs:0d~1aag0 db 0,0 ;cs:1B~1C sin(0) 对应的字符串“0”ag30 db 0.5,0 ;cs:1D~20 sin(30) 对应的字符串“0.5”ag60 db 0.866,0 ;cs:21~26 sin(60) 对应的字符串“0.866”ag90 db 1,0 ;cs:27~28 sin(90) 对应的字符串“1”;ag120 db 0.866,0 ;cs:29~2E sin(120)对应的字符串“0.866”ag150 db 0.5,0 ;cs:2F~32 sin(150)对应的字符串“0.5”ag180 db 0,0 ;cs:33~34 sin(180)对应的字符串“0” show:push bxpush espush simov bx,0b800h ; 设置显存段mov es,bx;以下用角度值/30 作为相对于 table 的偏移取得对应的字符串的偏移地址放在 bx 中mov ah,0mov bl,30div blmov bl,almov bh,0add bx,bxmov bx,table[bx] ; 以下显示 sin(x) 对应的字符串mov si,160*1240*2shows: mov ah,cs:[bx]cmp ah,0je showretmov es:[si],ahinc bxadd si,2jmp short shows showret:pop sipop espop bxretcode ends end start效果 16.4 程序入口地址的直接定址表 在直接定址表中存储子程序的地址。 功能实现一个子程序 setscreen为显示输出提供如下功能。1. 清屏;2. 设置前景色;3. 设置背景色;4. 向上滚动一行。参数 ah用 ah 寄存器传递功能号0 表示清屏1 表示设置前景色2 表示设置背景色,3 表示向上滚动一行;参数 al用 al 传送颜色值(al)∈ {0,1,2,3,4,5,6,7}。用于1、2号功能 功能实现方案1.清屏将显存中当前屏幕中的字符设为空格符;2.设置前景色设置显存中当前屏幕中处于奇地址的属性字节的第0、1、2位;3.设置背景色设置显存中当前屏幕中处于奇地址的属性字节的第4、5、6位;4.又向上滚动一行依次将第 n1 行的内容复制到第n行处;最后一行为空。 assume cs:code code segmentstart: mov ah,3mov al,2call setscreenmov ax,4c00hint 21h; ; ------------------- 子程序 setscreen ----------------- ; 设置显示效果 ; ------------------------------------------------------- ; 参数: ah 功能号0 表示清屏1 表示设置前景色2 表示设置背景色, 3 表示向上滚动一行; ; 参数: al 颜色值。用于1、2号功能 ; 返回: 无 ; ------------------------------------------------------- setscreen:jmp short settable dw sub1,sub2,sub3,sub4set:push bx ; 备份寄存器cmp ah,3 ; 判断功能号是否大于3ja sretmov bl,ahmov bh,0add bx,bx ; 根据 ah 中的功能号计算对应子程序在 table 表中的偏移call word ptr table[bx]sret: pop bx ; 还原寄存器ret ; 返回 ; -------------------- 子程序 setscreen ----------------- ; ; ; ---------------------- 子程序 sub1 -------------------- ; 清屏; 将显存中当前屏幕中的字符设为空格符 ; ------------------------------------------------------- ; 参数: 无 ; 返回: 无 ; -------------------------------------------------------sub1:push bx ; 备份寄存器push cxpush esmov bx,0b800hmov es,bxmov bx,0mov cx,2000sub1s: mov byte ptr es:[bx], ; 当前屏全设为空格add bx,2loop sub1spop es ; 备份寄存器pop cxpop bxret ; 返回 ; ---------------------- 子程序 sub1 -------------------- ; ; ; ---------------------- 子程序 sub2 -------------------- ; 设置前景色设置当前屏幕中所有奇列的第0、1、2位前景色 ; ------------------------------------------------------- ; 参数: 无 ; 返回: 无 ; -------------------------------------------------------sub2:push bx ; 备份寄存器push cxpush esmov bx,0b800hmov es,bxmov bx,1 ; 设置字符属性从 1 开始mov cx,2000sub2s: and byte ptr es:[bx],11111000b ; 清空前景色 0、1、2or es:[bx],al ; 应用 al 传来的颜色值add bx,2loop sub2spop es ; 备份寄存器pop cxpop bxret ; 返回 ; ---------------------- 子程序 sub2 -------------------- ; ; ; ---------------------- 子程序 sub3 -------------------- ; 设置背景色设置当前屏幕中所有奇列的第4、5、6位背景色 ; ------------------------------------------------------- ; 参数: 无 ; 返回: 无 ; -------------------------------------------------------sub3:push bx ; 备份寄存器push cxpush esmov cl,4shl al,cl mov bx,0b800hmov es,bxmov bx,1 ; 设置字符属性从 1 开始mov cx,2000sub3s: and byte ptr es:[bx],10001111b ; 清空 4 ~ 6or es:[bx],al ; 应用 al 传来的颜色值add bx,2loop sub3spop es ; 备份寄存器pop cxpop bxret ; 返回 ; ---------------------- 子程序 sub3 -------------------- ; ; ; ---------------------- 子程序 sub4 -------------------- ; 向上滚动一行依次将第 n1 行的内容复制到第n行处;最后一行为空。 ; ------------------------------------------------------- ; 参数: 无 ; 返回: 无 ; -------------------------------------------------------sub4:push cx ; 备份寄存器push sipush dipush espush dsmov si,0b800hmov es,simov ds,simov si,160 ; ds:si 指向第 n1 行mov di,0 ; es:di 指向第 n 行cldmov cx,24 ; 共复制 24 行sub4s: push cxmov cx,160rep movsb ; 复制pop cxloop sub4smov cx,80mov si,0sub4s1:mov byte ptr [160*24si], add si,2loop sub4s1pop ds ; 备份寄存器pop espop dipop sipop cxret ; 返回 ; ---------------------- 子程序 sub4 -------------------- ; code ends end start实验 16 编写包含多个功能子程序的中断例程 《汇编语言》- 读书笔记 - 第16章-实验16 编写包含多个功能子程序的中断例程
http://www.w-s-a.com/news/923489/

相关文章:

  • 网站伪静态是什么意思麻涌东莞网站建设
  • 理县网站建设公司郑州仿站定制模板建站
  • 手机网站建设网站报价诸城人才网招聘网
  • 一起做网站怎么下单临沂网站制作
  • 公司网站案例企业网站 模版
  • 做的好的响应式网站有哪些网站界面设计案例
  • 上海创意型网站建设icp备案网站信息
  • 网站没收录中山手机网站制作哪家好
  • 代驾软件开发流程wordpress 博客主题 seo
  • 成都的教育品牌网站建设网站广告js代码添加
  • 网站找人做seo然后网站搜不到了网站建设seoppt
  • 做网站优化有用吗学做文案的网站
  • wordpress 知名网站怎么做微网站
  • 用电脑怎么做原创视频网站河南建设工程信息网一体化平台官网
  • 云服务器和网站空间郑州做招商的网站
  • 规模以上工业企业的标准北京seo结算
  • 软件开发过程模型如何做网站性能优化
  • 网站建站公司广州南京江北新区楼盘
  • 哪些做展架图的网站好开发公司2022年工作计划
  • 磨床 东莞网站建设wordpress下载类主题系统主题
  • 免费学编程网站芜湖做网站都有哪些
  • 能发外链的网站门户网站网页设计规范
  • 网站建设所需人力南城区网站建设公司
  • 网站做图尺寸大小手机模板网站模板下载网站有哪些内容
  • 德阳市建设管理一体化平台网站做美食网站
  • 怎么做自己的推广网站2024年瘟疫大爆发
  • vps正常网站打不开linux网站建设
  • 福州网站快速排名在一个网站的各虚拟目录中默认文档的文件名要相同
  • 网站开发 流程图网站开发用哪个linux
  • 怎么用自己电脑做服务器发布网站吗seo门户网价格是多少钱