




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、为什么assume了DS以后,在代码里面还要再次mov ax,data;mov ds,ax呢?这里的 assume 语句是告诉编译器各个段是由哪个段寄存器指向的,这样编译器就可以根据所设定的条件在需要时加上段前缀指令;它并不生成对段寄存器进行设置的指令,这个是需要程序自己来做的。所以,就有了 assume 语句之后,代码里自己设置相应的段寄存器。嗯 楼上说的对。汇编语言有三类指令:(1)汇编指令,如mov ax,0等,有对应的机器码;(2)伪指令,如assume,db等,由编译器执行,计算机并不执行,没有对应机器码;(3)其他符号,如+、-等,由编译器识别,没有对应机器码。所以,assume只
2、是给编译器一个信息,告诉编译器相关段寄存器和段的联系。但是,计算机并不执行它,要想真正将段地址存放到相关段寄存器中,需要用汇编指令来完成。汇编语言中data segment什么意思下面是汇编的基本框架:定义数据段 就是数据存放的地方DATA SEGMENT.DATA ENDS定义代码段 当然就是要执行的程序代码了CODE SEGMENTSTART:.CODE ENDSEND START汇编伪指令assume cs:code,ds:data,ss:stack的含义王爽的汇编教程中,下面一段汇编源文件,大意是把0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0c
3、bah, 0987h这8个数,通过入栈出栈的方法逆序排列回原来的内存位置。assume cs:code, ds:data, ss:stackdata segmentdw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,20hmov ax,datamov ds,axmov bx,0mov cx,8s: push b
4、xadd bx,2loop smov bx,0mov cx,8s0: pop bxadd bx,2loop s0mov ax,4coohint 21hcode endsend start那么问题来了。问题:开头的伪指令assume cs:code,ds:data,ss:stack作用既然不是把cs、ds、ss三个指针指向三个段,那写它有什么用?问题:ds,ss指针都通过mov ax,data mov ds,ax和mov ax,stack mov ss,ax被手动指向的正确的代码段。唯独cs指针没有标明指向,程序是如何把cs指针指向正确的代码段的。最佳答案问题:你的程序中,可以用十个八个段,比如
5、段名 D1,D2,D3,D4,D5,D6,8086/8088 CPU的设计,是任一时刻,只能通过4个段寄存器最多同时访问4个段。那么问题来了:某个段(比如D5段)与哪个段寄存器关联、用哪个段寄存器访问呢?assume伪指令就是用来解决这个问题的。你 assume ES:D5 以后,就将程序中的D5段与ES段寄存器绑定了,汇编程序能知道,访问D5段中的变量,要用ES作为段寄存器。问题:DOS操作系统的程序装入功能,是这样设计的:装入exe文件时,根据exe文件头中的信息,将CS:IP指向装入后内存中程序的入口(第一条执行指令),也就是说,要在装入程序时设置CS, IP两个寄存器。对于其它3个段寄
6、存器,DOS装入功能的处理,是将它们指向DOS操作系统为管理程序内存而创建的程序段前缀PSP的段地址。那么问题来了:程序运行后,要访问程序中的某个段里的数据,怎么办呢?答案当然就是需要你自己在程序中加入将段地址传送到段寄存器的指令啦。最后提一下,assume是给汇编程序在汇编翻译源程序时用的,段寄存器(CS除外)要自己设置初值是DOS操作系统的功能要求你程序这么做的。追问assume ES:D5 以后,就将程序中的D5段与ES段寄存器绑定了这个“绑定”的意思是:如果用其他段寄存器比如DS:bx访问D5段,程序就会报错吗?追答举个例子吧:假设,在D5段中有一个变量x02,你程序中某处有一条指令
7、mov ax, x02若没有assume,汇编这条mov指令时,汇编程序会报错。因为不知道用哪个段寄存器。有assume,汇编结果是 mov ax, es:(x02的偏移地址),因为你assume告诉了汇编程序这个段用的是es这个段寄存器MOV AX,DATAS MOV DS,AX 这两句是什么意思?mov ax, datas ;将伪段地址放入ax中,datas不是指令,而是伪指令,实际上是一个动态的内存地址,要想运行,必须先其地相放入到ds中,但是内存数不能放入段地址。所以mov ds,ax ;就是将段地址装入段寄存器,最终达到了段地址装入段寄存器的目的!在80X86中规定,内存数不可以直接
8、装入段寄存器,所以才会有这样的一次中转!datas不是指令字,而是伪指令,实际上你可以理解他为一个标签,将这个标签装入AX中,实际装入的就是数据段的首地址!指令与伪指令的区别在在于,指令是属性指令集(属于CPU的),而伪指令则是属于编译软件的,扫描后由编译软件进行的操作。DOS系统功能调用表(INT 21H) AH功能调用参数返回参数00程序终止(同INT 20H)CS=程序段前缀01键盘输入并回显AL=输入字符02显示输出DL=输出字符03异步通迅输入AL=输入数据04异步通迅输出DL=输出数据05打印机输出DL=输出字符06直接控制台I/ODL=FF(输入)DL=字符(输出)AL=输入字符
9、07键盘输入(无回显)AL=输入字符08键盘输入(无回显)检测Ctrl-BreakAL=输入字符09显示字符串DS:DX=串地址$结束字符串0A键盘输入到缓冲区DS:DX=缓冲区首地址(DS:DX)=缓冲区最大字符数(DS:DX+1)=实际输入的字符数0B检验键盘状态AL=00有输入AL=FF无输入0C清除输入缓冲区并请求指定的输入功能AL=输入功能号(1,6,7,8,A)0D磁盘复位清除文件缓冲区0E指定当前缺省的磁盘驱动器DL=驱动器号0=A,1=B,.AL=驱动器数0F打开文件DS:DX=FCB首地址AL=00文件找到AL=FF文件未找到10关闭文件DS:DX=FCB首地址AL=00目录
10、修改成功AL=FF目录中未找到文件11查找第一个目录项DS:DX=FCB首地址AL=00找到AL=FF未找到12查找下一个目录项DS:DX=FCB首地址(文件中带有*或?)AL=00找到AL=FF未找到13删除文件DS:DX=FCB首地址AL=00删除成功AL=FF未找到14顺序读DS:DX=FCB首地址AL=00读成功 =01文件结束,记录中无数据 =02 DTA空间不够 =03文件结束,记录不完整15顺序写DS:DX=FCB首地址AL=00写成功 =01盘满 =02 DTA空间不够16建文件DS:DX=FCB首地址AL=00建立成功 =FF无磁盘空间17文件改名DS:DX=FCB首地址(D
11、S:DX+1)=旧文件名(DS:DX+17)=新文件名AL=00成功AL=FF未成功19取当前缺省磁盘驱动器AL=缺省的驱动器号0=A,1=B,2=C,.1A置DTA地址DS:DX=DTA地址1B取缺省驱动器FAT信息AL=每簇的扇区数DS:BX=FAT标识字节CX=物理扇区大小DX=缺省驱动器的簇数1C取任一驱动器FAT信息DL=驱动器号同上21随机读DS:DX=FCB首地址AL=00读成功 =01文件结束 =02缓冲区溢出 =03缓冲区不满22随机写DS:DX=FCB首地址AL=00写成功 =01盘满 =02缓冲区溢出23测定文件大小DS:DX=FCB首地址AL=00成功(文件长度填入FC
12、B)AL=FF未找到24设置随机记录号DS:DX=FCB首地址25设置中断向量DS:DX=中断向量AL=中断类型号26建立程序段前缀DX=新的程序段前缀27随机分块读DS:DX=FCB首地址CX=记录数AL=00读成功 =01文件结束 =02缓冲区太小,传输结束 =03缓冲区不满28随机分块写DS:DX=FCB首地址CX=记录数AL=00写成功 =01盘满 =02缓冲区溢出29分析文件名ES:DI=FCB首地址DS:SI=ASCIIZ串AL=控制分析标志AL=00标准文件 =01多义文件 =02非法盘符2A取日期CX=年DH:DL=月:日(二进制)2B设置日期CX:DH:DL=年:月:日AL=
13、00成功 =FF无效2C取时间CH:CL=时:分DH:DL=秒:1/100秒2D设置时间CH:CL=时:分DH:DL=秒:1/100秒AL=00成功 =FF无效2E置磁盘自动读写标志AL=00关闭标志AL=01打开标志2F取磁盘缓冲区的首址ES:BX=缓冲区首址30取DOS版本号AH=发行号,AL=版本31结束并驻留AL=返回码DX=驻留区大小33Ctrl-Break检测AL=00取状态 =01置状态(DL)DL=00关闭检测 =01打开检测DL=00关闭Ctrl-Break检测 =01打开Ctrl-Break检测35取中断向量AL=中断类型ES:BX=中断向量36取空闲磁盘空间DL=驱动器号
14、0=缺省,1=A,2=B,.成功:AX=每簇扇区数 BX=有效簇数 CX=每扇区字节数 DX=总簇数失败:AX=FFFF38置/取国家信息DS:DX=信息区首地址BX=国家码(国际电话前缀码)AX=错误码39建立子目录(MKDIR)DS:DX=ASCIIZ串地址AX=错误码3A删除子目录(RMDIR)DS:DX=ASCIIZ串地址AX=错误码3B改变当前目录(CHDIR)DS:DX=ASCIIZ串地址AX=错误码3C建立文件DS:DX=ASCIIZ串地址CX=文件属性成功:AX=文件代号错误:AX=错误码3D打开文件DS:DX=ASCIIZ串地址AL=0读 =1写 =3读/写成功:AX=文件代
15、号错误:AX=错误码3E关闭文件BX=文件代号失败:AX=错误码3F读文件或设备DS:DX=数据缓冲区地址BX=文件代号CX=读取的字节数读成功: AX=实际读入的字节数 AX=0已到文件尾读出错:AX=错误码40写文件或设备DS:DX=数据缓冲区地址BX=文件代号CX=写入的字节数写成功: AX=实际写入的字节数写出错:AX=错误码41删除文件DS:DX=ASCIIZ串地址成功:AX=00出错:AX=错误码(2,5)42移动文件指针BX=文件代号CX:DX=位移量AL=移动方式(0:从文件头绝对位移,1:从当前位置相对移动,2:从文件尾绝对位移)成功:DX:AX=新文件指针位置出错:AX=错
16、误码43置/取文件属性DS:DX=ASCIIZ串地址AL=0取文件属性AL=1置文件属性CX=文件属性成功:CX=文件属性失败:CX=错误码44设备文件I/O控制BX=文件代号AL=0取状态 =1置状态DX =2读数据 =3写数据 =6取输入状态 =7取输出状态DX=设备信息45复制文件代号BX=文件代号1成功:AX=文件代号2失败:AX=错误码46人工复制文件代号BX=文件代号1CX=文件代号2失败:AX=错误码47取当前目录路径名DL=驱动器号DS:SI=ASCIIZ串地址(DS:SI)=ASCIIZ串失败:AX=出错码48分配内存空间BX=申请内存容量成功:AX=分配内存首地失败:BX=
17、最大可用内存49释放内容空间ES=内存起始段地址失败:AX=错误码4A调整已分配的存储块ES=原内存起始地址BX=再申请的容量失败:BX=最大可用空间 AX=错误码4B装配/执行程序DS:DX=ASCIIZ串地址ES:BX=参数区首地址AL=0装入执行AL=3装入不执行失败:AX=错误码4C带返回码结束AL=返回码4D取返回代码AX=返回代码4E查找第一个匹配文件DS:DX=ASCIIZ串地址CX=属性AX=出错代码(02,18)4F查找下一个匹配文件DS:DX=ASCIIZ串地址(文件名中带有?或*)AX=出错代码(18)54取盘自动读写标志AL=当前标志值56文件改名DS:DX=ASCII
18、Z串(旧)ES:DI=ASCIIZ串(新)AX=出错码(03,05,17)57置/取文件日期和时间BX=文件代号AL=0读取AL=1设置(DX:CX)DX:CX=日期和时间失败:AX=错误码58取/置分配策略码AL=0取码AL=1置码(BX)成功:AX=策略码失败:AX=错误码59取扩充错误码AX=扩充错误码BH=错误类型BL=建议的操作CH=错误场所5A建立临时文件CX=文件属性DS:DX=ASCIIZ串地址成功:AX=文件代号失败:AX=错误码5B建立新文件CX=文件属性DS:DX=ASCIIZ串地址成功:AX=文件代号失败:AX=错误码5C控制文件存取AL=00封锁 =01开启BX=文件代号CX:DX=文件位移SI:DI=文件长度失败:AX=错误码62取程序段前缀BX=PSP地址汇编中INT 21H是什么意思?INT 软件中断, 21H是函数入口地址,实际上就是调用DOS的系统功能。是DOS的中断调用比如MOV AH 4CHINT 21H是返回DOS系统的通过给AH寄存器赋值4CH,然后调用INT 21H指令,计算机就会根据AH寄存器中的值执行相应的操作,其中4CH是返回D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《挑战与机遇:未来教育发展趋势》课件
- 《痔疮并发症的防治》课件
- 《建筑施工安全》课件
- 网络法律故事阅读活动投稿流程指导课件
- 二年级语文下册 课文6 19大象的耳朵教学设计 新人教版
- 四川托普信息技术职业学院《俄语写作实践》2023-2024学年第二学期期末试卷
- 山西财贸职业技术学院《商务礼仪》2023-2024学年第二学期期末试卷
- 宜昌科技职业学院《信息理论与编码》2023-2024学年第二学期期末试卷
- 梧州学院《3Dmax进阶动画》2023-2024学年第二学期期末试卷
- 松原职业技术学院《语言专业第二外语法语》2023-2024学年第一学期期末试卷
- 原地面高程复测记录表正式版
- 高等学校建筑学专业本科(五年制)教育评估标准
- 品质周报表(含附属全套EXCEL表)
- 商铺装修工程施工方案.
- MQ2535门座起重机安装方案
- 一针疗法高树中著精校版本
- 第六课-吸烟者的烦恼-《桥梁》实用汉语中级教程(上)课件
- 八年级数学下册第3章图形与坐标复习教案(新)湘教
- 吊篮作业安全监理专项实施细则
- 晖老年服务有限公司创业计划书
- 地下车库建筑结构设计土木工程毕业设计
评论
0/150
提交评论