洞察纵观鸿蒙next版本,如何凭借FinClip加强小程序的跨平台管理,确保企业在数字化转型中的高效运营和数据安全?
716
2022-09-25
汇编语言上机的4个步骤
汇编语言上机的4个步骤
出现提示符“-”,表示已进入DEBUG状态,可以使用DEBUG命令。 ①用U命令查看程序是否进入内存。 -U回车 代码段 偏移量 机器码 源程序 18F4: 2000 1E PUSH DS 18F4: 2001 2BC0 SUB AX,AX 18F4: 2003 50 PUSH AX 18F4: 2004 B8F618 MOV AX,18F6H 18F4: 2007 8ED8 MOV DS,AX …… …… 18F4: xxxx xxxx RET 上面从左到右依次给出了程序所在的段地址、偏移地址、机器语言指令和汇编语言指令。系统自动给程序分配了数据段(址为18F6H,说明程序的数据都在这个18F6H段的相关内存单元内存单元。 ②利用T命令执行程序, T为单步执行命令,既每一个T执行一条指令,观察寄存器存储单元的值及各标志的变化。 ③检查程序的运行结果。 利用D命令检查该内存单元是否为这个结果。 -D数据段段基址 : 偏移地址(要查看的存储单元的偏移地址) 本例中D 18F6:1000 ④运行命令G(GO) 运行命令G的格式如下。 —G 其中,ADDRESS1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示所有寄存器和标志位的内容,以及下一条将要执行的指令。
(5)退出DEBUG命令Q(QUIT) 退出DEBUG命令Q的格式如下 -Q 该命令将退出DEBUG,并返回DOS。 最终显示“C:> MASM>”。 除上述命令外,DEBUG的常用命令R可以显示和修改寄存器的内容,命令E可以显示和修改内存单元的内容,命令G可以连续执行指令。
2、使用DOSBOX软件搭建汇编环境,调用masm和link程序,将源代码编译链接成可执行程序(maxmin.exe)。如图
3、运行maxmin.exe,查看程序运行情况及结果检验
在DOS环境中运行debug maxmin.exe,运用debug的u,g,d,r,t调用功能,即可查看检验程序运行状况。
首先调用反汇编指令u查看每条代码的代码段偏移地址
找到已初始化完成语句MOV AX,SEG AREA,该语句对应的偏移地址为0005,
再调用运行命令g,执行g5 ,并调用显示内存单元内容的命令D (d0)查看内存单元内容
绿框中为待处理10个无符号数100,3,654,54,898,3,125,6666,545,781对应的16进制存储单元,每4位16进制对应一个0~65535无符号数,共20个存储单元。两红框中为表示最大值和最小值的变量MAX和MIN的存储单元,预设值分别为65535和0,即16进制数FFFF和0000。
再次调用反汇编指令u查看后续代码的代码段偏移地址,找到主程序已运行完毕的语句MOV AH,4CH,该语句对应的偏移地址为0046
再调用运行命令g,执行g0046,并调用显示内存单元内容的命令D (d46)查看内存单元内容
变量MAX中为十六进制数1A0A,刚好对应十个数中最大数6666,
变量MIN中为十六进制数0003,刚好对应十个数中最小数3,运行结果正确。
实验过程原始记录及计算结果(数据、表格、计算、曲线等)
在完成求取最小值程序编写后,我尚未继续编写求取最大值程序,以便于检验最小值程序和整体框架的正确性,经运行调试后,得到正确的求取最小值程序,但之后我本打算将最小值程序稍作修改得到最大值程序,编写后进行调试发现如下错误结果
经检查发现,是我在求取最小值程序后尚未将变址寄存器SI赋值回数组AREA的首地址,使得求取最大值程序发生错误。改正方法:求取最大值程序前应重新初始化,将SI赋回数组AREA的首地址,修改程序,加上 MOV SI,OFFSET AREA命令,之后运行调试正确。
附录2 常用DOS功能调用一览表
功能号在AH中,并设好其他入口参数,向DOS发出INT 21H命令,最后获得出口参数,如表7所示。 表7 调 用 号 功 能 入口参数 出口参数 00H 程序终止 CS=PSP段地址 — 01H 键盘输入字符 — AL=输入的字符 02H 显示输出 DL=显示的字符 — 03H 串行设备输入 — AL=输入的字符 04H 串行设备输出 DL=输出的字符 — 05H 打印输出 DL=输出的字符 — 06H 直接控制台I/O DL=0FFH(输入请求); DL=字符(输出请求) AL=输入的字符
07H 直接控制台I/O (不显示输入) — AL=输入的字符
08H 键盘输入字符(无回显) — AL=输入的字符 09H 显示字符串 DS:DX=缓冲区首址 — 0AH 输入字符串 DS:DX=缓冲区首址 — 0BH 检查标准输入状态 — AL=00无按键; AL=0FFH有按键 0CH 清除输入缓冲区并执行指定的标准输入功能 AL=功能号(01/06/07/08/0AH); DS:DX=缓冲区(0AH功能) AL=输入的数据(功能01/06/07/08) 0DH 初始化磁盘状态 — — 0EH 选择默认的驱动器 DL=驱动器号(0=A,1=B…) AL=逻辑驱动器数 0FH 打开文件 DS:DX=未打开的FCB首址 AL=00成功; AL=0FFH失败 10H 关闭文件 DS:DX=打开的FCB首址 AL=00成功; AL=0FFH失败 11H 查找第一匹配目录 DS:DX=未打开的FCB首址 AL=00成功; AL=0FFH失败 12H 查找下一匹配目录 DS:DX=未打开的FCB首址 AL=00成功; AL=0FFH失败 13H 删除文件 DS:DX=未打开的FCB首址 AL=00成功; AL=0FFH失败 14H 顺序读 DS:DX=打开的FCB首址 AL=00成功; AL=01文件结束; AL=02缓冲区太小; AL=03缓冲区不满 15H 顺序写 DS:DX=打开的FCB首址 AL=00成功; AL=01盘满; AL=02缓冲区太小 16H 创建文件 DS:DX=未打开的FCB首址 AL=00成功,AL=0FFH目录区满 17H 文件换名 DS:DX=被修改的FCB首址 AL=00成功,AL=0FFH未找到目录项或文件重名 *18H 保留未用 — — 19H 获取默认驱动器号 — AL=驱动器号(0=A,1=B…) 1AH 设置磁盘缓冲区DTA DS:DX=磁盘缓冲区首址 — *1BH 获取默认驱动器的磁盘格式信息 — AL=每簇的扇区数; CX=每扇区的字节数; DX=数据区总簇数-1; DS:BX=介质描述字节 *1CH 获取指定驱动器的磁盘格式信息 DL=驱动器号(0=默认,1=A…) AL=每簇的扇区数; CX=每扇区的字节数; DX=数据区总簇数-1; DS:BX=介质描述字节 *1DH 保留未用 — — *1EH 保留未用 — — *1FH 获取默认驱动器的DPB — DS:BX=DPB首址 *20H 保留未用 — — 21H 随机读一个记录 DS:DX=打开的FCB首址 AL=00成功; AL=01文件结束; AL=02缓冲区太小; AL=03缓冲区不满 22H 随机写一个记录 DS:DX=打开的FCB首址 AL=00成功; AL=01盘满; AL=02缓冲区太小 23H 获取文件大小 DS:DX=未打开的FCB首址 AL=00成功; AL=0FFH失败 24H 设置随机记录号 DS:DX=打开的FCB首址 — 25H 设置中断向量 AL=中断号 DS:DX=中断程序入口 — *26H 创建新的PSP DS:DX=新的PSP段地址 — 27H 随机读若干记录 DS:DX=打开的FCB首址 CX=要读入的记录数 AL=00成功, AL=01文件结束,AL=02缓冲区太小,AL=03缓冲区不满; CX=读入的块数 28H 随机写若干记录 DS:DX=打开的FCB首址 CX=要写入的记录数 AL=00成功, AL=01盘满,AL=02缓冲区太小,AL=03缓冲区不满; CX=已写的块数 29H 分析文件名 AL=分析控制标记 DS:SI=要分析的字符串 ES:DI=未打开的FCB首址 AL=00未通配符,AL=01有通配符,AL=0FFH驱动器字母无效; ES:DI=未打开的FCB 2AH 获取系统日期 — CX=年(1980~2099),DH=月,DL=日,AL=星期(0=星期日) 2BH 设置系统日期 CX=年,DH=月,DL=日 AL=00成功, AL=0FFH失败 2CH 获取系统时间 — CH=时(0~23),CL=分,DH=秒,DL=百分之几秒 2DH 设置系统时间 CX=时,分DX=秒,百分秒 AL=00成功,AL=0FFH失败 2EH 设置/复位校验开关 AL=0关闭,1打开 — 2FH 获取磁盘传输地址DTA — ES:BX=DTA首地址 30H 获取DOS版本 — AL,AH=DOS的主、次版本 31H 结束并驻留 AL=返回码,DX=内存大小 — *32H 获取指定驱动器的DPB — DS:BX=DPB首址 33H 获取或设置Ctrl+Break标志 AL=0:取,1:置,DL=标志 DL=标志(取功能) 0:关 1:开 *34H 获取DOS中断标志 — ES:BX=DOS中断标志 35H 获取中断向量地址 AL=中断号 ES:BX=中断程序入口 36H 获取磁盘的自由空间 DL=驱动器号(0=缺省,1=A AX=FF驱动器无效,其他每簇扇区数 BX=自由簇数; CX=每扇区字节数; BX=文件区所占簇数 *37H 获取/设置参数分隔符; 获取/设置设备名许可标记 AL=0:取分隔符, 1:置分隔符,DL=分隔符 2:取许可标记 3:置许可标记,DL=许可标记 DL=分隔符(功能0); DL=许可标记(功能2) 38H 获取国家信息 AL=0,DS:DX=缓冲区首址 — 39H 创建子目录 DS:DX=路径字符串 CF=0成功, CF=1失败;AX=错误码 3AH 删除子目录 DS:DX=路径字符串 CF=0成功, CF=1失败;AX=错误码 3BH 设置子目录 DS:DX=路径字符串 CF=0成功, CF=1失败;AX=错误码 3CH 创建文件 DS:DX=带路径的文件名 CX=属性1(只读),CX=属性2(隐蔽),CX=属性4(系统) CF=0成功,AX=文件号; CF=1失败,AX=错误码 3DH 打开文件 DS:DX=带路径的文件名; AL=方式0(读); AL=方式1(写); AL=方式2(读写) CF=0成功,AX=文件号; CF=1失败,AX=错误码 3EH 关闭文件 BX=文件号 CF=0成功; CF=1失败,AX=错误码 3FH 读文件或设备 BX=文件号; CX=字节数 CF=0成功; DX:AX=新的指针位置 40H 写文件或设备 DS:DX=缓冲区首址 CF=1失败,AX=错误码 41H 删除文件 DS:DX=带路径的文件名 CF=0成功, CF=1失败, AX=错误码 42H 移动文件指针 AL=方式0(正向); AL=方式1(相对); AL=方式2(反向); BX=文件号; CX:DX=移动的位移量 CF=0成功,DX:AX=新的文件指针; CF=1失败,AX=错误码 43H 获取/设置文件属性 AL=0(获取); AL=1(设置); CX=新属性; DS:DX=带路径的文件名 CX=属性(功能0) 1-只读 2-隐蔽4-系统20H-归档 44H 设备输入/输出控制:获取/设置与打开设备的句柄相关联的信息,或 发送/接收控制字符串至设备句柄 AL=0/1(获取/设置设备信息); AL=2/3(读/写设备控制通道); AL=4/5(同功能2/3); AL=6/7(取输入/输出状态); BX=句柄(功能03,67); BL=驱动器号(功能4~5); CX=字节数(功能2~5); DS:DX=缓冲区(功能2~5) CF=0成功; DX=设备信息(功能0); AL=状态(功能6/7),0表示未准备,1表示准备; AX=传送的字节数(功能2-5) 45H 复制文件号(对于打开的文件返回一个文件号) BX=文件号 CF=0成功,AX=新文件号; CF=1失败,AX=错误码 46H 强行复制文件号 BX=现存的文件号; CX=第2文件号 CF=0成功,CF=1失败; AX=错误码 47H 获取当前目录 DL=驱动器号; DS:SI=缓冲区首址 CF=0成功, CF=1失败; AX=错误码 48H 分配内存 BX=所需的内存节数 CF=0成功,AX=分配的段数; CF=1失败,AX=错误码; BX=最大可用块大小 49H 释放内存 ES=释放块的段值 CF=1失败,AX=错误码 4AH 修改分配内存 ES=修改块的段值; BX=新长度(以节为单位) CF=1失败;AX=错误码; BX=最大可用块大小 4BH 装载程序;运行程序 AL=0装载并运行; AL=1获得执行信息; AL=3装载但不运行; DS:DX=带路径的文件名; ES:BX=装载用的参数块 CF=1失败;AX=错误码
4CH 带返回码的结束 AL=进程返回码 — 4DH 获取由31H/4CH返回的返回码 — AL=进程返回码; AH= 0表示正常结束,AH= 1表示由Ctrl+Break结束,AH= 2表示由严重设备错误而结束,AH= 3表示由调用31H而结束 4EH 查找第一个匹配项 DS:DX=带路径的文件名; CX=属性 CF=1失败;AX=错误码 4FH 查找下一个匹配项 CF=1失败,AX=错误码 *50H 建立当前的PSP段地址 BX=PSP段地址 — *51H 读当前的PSP段地址 — BX=PSP段地址 *52H 获取DOS系统数据区首址 — ES:BX=DOS数据区首址 *53H 为块设备建立DPB DS:SI=BPB,ES:DI=DPB — 54H 获取校验开关设定值 — AL=标志值(0:关,1:开) *55H 由当前PSP建立新PSP DX=PSP段地址 — 56H 文件换名 DS:DX=带路径的旧文件名 ES:DI=带路径的新文件名 CF=1失败,AX=错误码 57H 获取/置文件时间及日期 AL=0/1取/置,BX=文件号 CX=时间,DX=日期 CF=0成功,CX=时间,DX= 日期
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~