全球微速讯:用机器指令和汇编指令编程检测点 汇编语言程序设计
文章目录
检测点1.1检测点 2.1检测点2.2检测点2.3实验一 查看CPU和内存,用机器指令和汇编指令编程检测点3.1检测点3.2实验2 用机器指令和汇编指令编程
(相关资料图)
检测点1.1
(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。
(2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。
(3)1KB的存储器可以存储 8192(2^13) 个bit, 1024个Byte。
(4)1GB是 1073741824 (2^30) 个Byte、1MB是 1048576(2^20) 个Byte、1KB是 1024(2^10)个Byte。
(5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为:64 (KB)、 1 (MB)、 16 (MB)、 4 (GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为: 1 (B)、 1 (B)、 2 (B)、 2 (B)、 4 (B)。
(7)从内存中读取1024字节的数据,8086至少要读 512 次,80386至少要读 256 次。
(8)在存储器中,数据和程序以 二进制 形式存放。
解题过程:
(1)1KB=1024B,8KB=1024B*8=2^N,N=13。
(2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。
(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。
(4)1GB=1073741824B(即230)1MB=1048576B(即220)1KB=1024B(即2^10)。
(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。
(6)8根数据总线一次可以传送8位二进制数据(即一个字节)。
(7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。
(8)在存储器中指令和数据没有任何区别,都是二进制信息。
检测点 2.1
(1) 写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX=F4A3H mov ah,31H AX=31A3H mov al,23H AX=3123H add ax,ax AX=6246H mov bx,826CH BX=826CH mov cx,ax CX=6246H mov ax,bx AX=826CH add ax,bx AX=04D8H mov al,bh AX=0482H mov ah,bl AX=6C82H add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H
(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
mov ax,2 AX=2 add ax,ax AX=4 add ax,ax AX=8 add ax,ax AX=16
检测点2.2
(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH 。
解题过程:
物理地址=SA*16+EA
EA的变化范围为0h~ffffh
物理地址范围为(SA16+0h)~(SA16+ffffh)
现在SA=0001h,那么寻址范围为
(0001h16+0h)~(0001h16+ffffh)
=0010h~1000fh
(2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为 1001H ,最大为 2000H 。
当段地址给定为 1001H 以下和 2000H 以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。
解题过程:
物理地址=SA*16+EA
20000h=SA*16+EA
SA=(20000h-EA)/16=2000h-EA/16
EA取最大值时,SA=2000h-ffffh/16=1001h,SA为最小值
EA取最小值时,SA=2000h-0h/16=2000h,SA为最大值
这里的ffffH/16=fffh是通过WIN自带计算器算的
按位移来算确实应该为fff.fh,这里小数点后的f应该是省略了
单就除法来说,应有商和余数,但此题要求的是地址最大和最小,所以余数忽略了
如果根据位移的算法(段地址*16=16进制左移一位),小数点后应该是不能省略的
我们可以反过来再思考下,如果SA为1000h的话,小数点后省略
SA=1000h,EA取最大ffffh,物理地址为1ffffh,将无法寻到20000H单元
这道题不应看成是单纯的计算题
检测点2.3
下面的3条指令执行后,cpu几次修改IP?都是在什么时候?最后IP中的值是多少?
mov ax,bx sub ax,ax jmp ax
答:一共修改四次
第一次:读取mov ax,bx之后
第二次:读取sub ax,ax之后
第三次:读取jmp ax之后
第四次:执行jmp ax修改IP
最后IP的值为0000H,因为最后ax中的值为0000H,所以IP中的值也为0000H
实验一 查看CPU和内存,用机器指令和汇编指令编程
2实验任务
(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。
机器码 汇编指令 寄存器
b8 20 4e mov ax,4E20H ax=4E20H
05 16 14 add ax,1416H ax=6236H
bb 00 20 mov BX,2000H bx=2000H
01 d8 add ax,bx ax=8236H
89 c3 mov bx,ax bx=8236H
01 d8 add ax,bx ax=046CH
b8 1a 00 mov ax,001AH ax=001AH
bb 26 00 mov bx,0026H bx=0026H
00 d8 add al,bl ax=0040H
00 dc add ah,bl ax=2640H
00 c7 add bh,al bx=4026H
b4 00 mov ah,0 ax=0040H
00 d8 add al,bl ax=0066H
04 9c add al,9CH ax=0002H
Microsoft(R) Windows DOS(C)Copyright Microsoft Corp 1990-2001.C:\DOCUME~1\ADMINI~1>debug-a0C1C:0100 mov ax,4e200C1C:0103 add ax,14160C1C:0106 mov bx,20000C1C:0109 add ax,bx0C1C:010B mov bx,ax0C1C:010D add ax,bx0C1C:010F mov ax,001a0C1C:0112 mov bx,00260C1C:0115 add al,bl0C1C:0117 add ah,bl0C1C:0119 add bh,al0C1C:011B mov ah,00C1C:011D add al,bl0C1C:011F add al,9c0C1C:0121-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0100 NV UP EI PL NZ NA PO NC0C1C:0100 B8204E MOV AX,4E20-tAX=4E20 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0103 NV UP EI PL NZ NA PO NC0C1C:0103 051614 ADD AX,1416-tAX=6236 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0106 NV UP EI PL NZ NA PE NC0C1C:0106 BB0020 MOV BX,2000-tAX=6236 BX=2000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0109 NV UP EI PL NZ NA PE NC0C1C:0109 01D8 ADD AX,BX-tAX=8236 BX=2000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=010B OV UP EI NG NZ NA PE NC0C1C:010B 89C3 MOV BX,AX-tAX=8236 BX=8236 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=010D OV UP EI NG NZ NA PE NC0C1C:010D 01D8 ADD AX,BX-tAX=046C BX=8236 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=010F OV UP EI PL NZ NA PE CY0C1C:010F B81A00 MOV AX,001A-tAX=001A BX=8236 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0112 OV UP EI PL NZ NA PE CY0C1C:0112 BB2600 MOV BX,0026-tAX=001A BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0115 OV UP EI PL NZ NA PE CY0C1C:0115 00D8 ADD AL,BL-tAX=0040 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0117 NV UP EI PL NZ AC PO NC0C1C:0117 00DC ADD AH,BL-tAX=2640 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0119 NV UP EI PL NZ NA PO NC0C1C:0119 00C7 ADD BH,AL-tAX=2640 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011B NV UP EI PL NZ NA PO NC0C1C:011B B400 MOV AH,00-tAX=0040 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011D NV UP EI PL NZ NA PO NC0C1C:011D 00D8 ADD AL,BL-tAX=0066 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011F NV UP EI PL NZ NA PE NC0C1C:011F 049C ADD AL,9C-tAX=0002 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0121 NV UP EI PL NZ AC PO CY0C1C:0121 D3990075 RCR WORD PTR [BX+DI+7500],CL DS:B526=0000-q
(2)将下面的3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
Microsoft(R) Windows DOS(C)Copyright Microsoft Corp 1990-2001.C:\DOCUME~1\ADMINI~1>debug-a 2000:02000:0000 mov ax,12000:0003 add ax,ax2000:0005 jmp 2000:00032000:0007-r csCS 0C1C:2000-r ipIP 0100:0000-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0000 NV UP EI PL NZ NA PO NC2000:0000 B80100 MOV AX,0001-tAX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0003 NV UP EI PL NZ NA PO NC2000:0003 01C0 ADD AX,AX-tAX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0005 NV UP EI PL NZ NA PO NC2000:0005 EBFC JMP 0003-tAX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0003 NV UP EI PL NZ NA PO NC2000:0003 01C0 ADD AX,AX-tAX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0003 NV UP EI PL NZ NA PO NC2000:0003 01C0 ADD AX,AX-tAX=0004 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0005 NV UP EI PL NZ NA PO NC2000:0005 EBFC JMP 0003-tAX=0004 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0003 NV UP EI PL NZ NA PO NC2000:0003 01C0 ADD AX,AX-tAX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0005 NV UP EI PL NZ NA PO NC2000:0005 EBFC JMP 0003-tAX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0003 NV UP EI PL NZ NA PO NC2000:0003 01C0 ADD AX,AX-q
(3) 查看内存中的内容
PC主板上的ROM中有个一出产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个出产日期并试图改变它。
Microsoft(R) Windows DOS(C)Copyright Microsoft Corp 1990-2001.C:\DOCUME~1\ADMINI~1>debug-d ffff:0 fFFFF:0000 EA 5B E0 00 F0 31 32 2F-32 35 2F 30 37 00 FC 59 .[...12/25/07..Y-q
地址C0000~FFFFF的内存单元为只读存储器,写入数据操作是无效的。
因此出产日期无法改变。
检测点3.1
(1) 在DEBUG中,用 “D 0:0 lf” 查看内存,结果如下:
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值
mov ax,1mov ds,axmov ax,[0000] ax= 2662H mov bx,[0001] bx= E626H mov ax,bx ax= E626H mov ax,[0000] ax= 2662H mov bx,[0002] bx= D6E6H add ax,bx ax= FD48H add ax,[0004] ax= 2C14H mov ax,0 ax= 0 mov al,[0002] ax= 00e6H mov bx,0 bx= 0 mov bl,[000c] bx= 0026H add al,bl ax= 000CH
(2) 内存中的情况如下图所示
各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;
① 写出CPU执行的指令序列(用汇编指令写出)。
② 写出CPU执行每条指令后,CS、IP和相关寄存器的数值。
③ 再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?
指令序列CSIPDSAXBX
初始值2000h0000
1 mov ax,6622h2000h3h06622h0
2 jmp 0ff0:0100ff0h100h06622h0
3 mov ax,2000hff0h103h02000h0
4 mov ds,axff0h105h2000h2000h0
5 mov ax,[8]ff0h108h2000hc389h0
6 mov ax,[2]ff0h10bh2000hea66h0
检测点3.2
(1)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。
mov ax,1000H mov ds,ax mov ax,2000H mov ss,ax mov sp,10h push [0] push [2] push [4] push [6] push [8] push [A] push [C] push [E]
(2)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。
mov ax,2000H mov ds,ax mov ax,1000Hmov ss,ax mov sp,0 pop [e] pop [c] pop [a] pop [8] pop [6] pop [4] pop [2] pop [0]
实验2 用机器指令和汇编指令编程
(1)使用DEBUG,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax,ffffmov ds,axmov ax,2200mov ss,axmov sp,0100 mov ax,[0] ;ax= 5BEAHadd ax,[2] ;ax= 5CCAHmov bx,[4] ;bx= 31F0Hadd bx,[6] ;bx= 6122H push ax ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 5CCAHpush bx ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 6122Hpop ax ;sp= 00FCH ,ax= 6122Hpop bx ;sp= 00FEH ,bx= 5CCAH push [4] ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 31F0push [6] ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 2F32 此实验答案不定,需根据每台机器的实际运行情况。
标签:
相关推荐:
最新新闻:
- 如何解决360浏览器卡死的问题?360浏览器卡死问题解决方法|世界快播报
- 全球头条:Linux中tar命令怎么用?Linux中tar命令用法
- Linux系统适合日常使用吗?普通人学Linux能干什么?
- qd怎么玩java?怎么安装游戏和删除游戏?-天天动态
- gpedit.msc打开组策略无效怎么办?解决方法
- 全球讯息:【键鼠研究】微软IO1.1鼠标驱动界面展示
- 如何获得PayPal认证?获得PayPal认证的好处有哪些?_焦点速看
- windows10系统插耳机有回声怎么办?解决办法
- 今日热搜:tcp/ip协议详解 tcp/ip四层模型之http协议请求格式
- 世界热点评!初级日语语法有哪些?日本语初级语法整理
- 如何打开电脑桌面的“计算机”图标?禁用光驱的方法 环球今日报
- 什么是线程?协程有哪些优缺点?
- 天天最资讯丨lombok插件日志使用方法——RunWith注解
- 世界观天下!Python难学吗?精通Python需要多长时间?
- 不小心格式化交换机Flash怎么办?恢复方法步骤
- 公网ip与内网ip有啥区别呢?怎么查询自己宽带是公网ip还是内网ip?
- 全球微速讯:用机器指令和汇编指令编程检测点 汇编语言程序设计
- DX10.1与DX3D10的区别是什么?DX10.1与DX10的简述-全球今热点
- umd格式是什么?用umd炮手制作umd格式电子书教程
- excel快速合并单元格筛选技巧大全(收藏)-世界播资讯
- dot是什么格式的文件?dot文件如何打开?-世界视讯
- winterboard怎么使用?winterboard安装使用步骤
- wifi共享精灵打不开到底如何处理?故障原因及处理方法
- 电脑硬盘出现大量“坏扇区”怎么办?教你轻松修复-环球热消息
- 佳能单反闪光灯怎么开?单反闪光灯的使用放及技巧分享
- AppLocker是什么?Applocker如何使用?
- NBA2kol手柄怎么用?nba2konline2手柄按键设置?
- Word怎么单独设置页眉?页眉如何设置每页不同?
- 电脑如何关闭Windows安全警报?关闭windows安全警报操作方法
- 百度网盘什么文件格式都能上传吗?百度网盘怎么上传文件?
- vagaa搜索不到资源怎么回事?vagaa哇嘎搜索没反应的怎么解决?
- 怎么把电脑设置wifi热点?win7系统电脑wifi热点设置方法
- SmartGet是什么软件?SmartGet设置方法
- 2023年4月23日适合提车吗
- 《速激10》新电视预告 家人侠齐齐露脸各显身手
- “下周回国”?法拉第未来FF91首批交付时间再推迟两个月
- 全球聚焦:ColorOS 13.1官宣升级计划,更多用户即将开启流畅高效的体验之旅
- 天天新动态:0.8秒极速拍摄!小米13 Ultra新增徕卡街拍模式
- H800国内首发 腾讯云发布最新高性能计算集群_天天热头条
- 苹果iPhone 15 Pro设计再曝光:采用音量双按键设计、无固态按键
- 显示效果稳了!小米Pad 6系列平板搭载2.8K显示屏,支持144Hz刷新率:世界热闻
- 【播资讯】国产FPS《边境》发布之路坎坷:服务器出现紧急BUG
- 视点!2023年未来游戏展夏季展示定于6月11日举行
- 环球最资讯丨山西同世缘贸易有限公司
- 真人剧《斗破苍穹之少年归来》首支预告:斗者气概不灭 热血少年归来!
- 椰树模特展台跳舞被指营销擦边 网友:劝你不要多管闲事 视焦点讯
- 小米13 Ultra跑分曝光:毫无惊喜-环球热议
- 亚马逊云科技推出创新成长企业加速中心 携手合作伙伴赋能成长型企业_环球看点
- 视点!市场上的国产电视机价格怎么样?不同品牌的国产电视机价格
- 什么是鼠标手?鼠标手有什么症状?
- 世界速递!qsv格式转换mp4怎么操作?qsv格式转换mp4步骤
- 焦点报道:内存卡无法格式化怎么办?内存卡无法格式化的解决方法
- 今日播报!ios15.3怎么退回?恢复之前的系统备份很重要
- 世界头条:iPhonex尺寸多大?史上屏幕最大的苹果手机
- 康派集成灶优势有哪些?康派集成灶性能优点
- 爱奇艺vip激活码怎么获取?获取方法大全
- 踢脚线暖气片安装方法有哪些?踢脚线暖气片安装步骤介绍
- 全球今头条!索尼LT26i容量是多少?索尼LT26i容量介绍
- 如何更改电脑语言设置?如何添加自己的语言?
- 支付宝蚂蚁花呗利息如何计算?支付宝蚂蚁花呗利息计算方法-天天实时
- 中柏笔记本电脑怎么样?中柏笔记本电脑有哪些不足之处?
- PS CS6如何破解?photoshop CS6破解教程
- 焦点热文:相机存储卡格式化了数据能恢复吗?相机无法格式化存储卡怎么办?
- 怎样在淘宝网上买东西?流程与步骤详解 环球新资讯
- 怎么配置V530交换机?Xshell下载及安装软件教程
- 每日播报!常见HTTP状态码都有哪些?分别表示什么意思?
- 【PHP培训】如何学好PHP?PHP学习方法有哪些? 热点聚焦
- 世界观热点:【完结篇】Java基础入门(集合版)
- pdf如何在线编辑和修改?具体方法步骤
- 如何自学编程?自学编程的方法技巧
- 什么是微信公众平台?微信公众平台接口开发指南_今日要闻
- 如何正确压缩视频文件?视频文件压缩成MP4格式的方法
- 微信公众号助力活动怎么做?制作教程来啦 世界短讯
- 家用空气净化器哪个牌子好?除雾霾效果好的品牌有哪些?_天天观热点
- 单卡手机怎么变双卡双待?单卡手机变双卡双待的方法流程_世界热议