. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  新的一年到来,我要给自己的学习留下足迹!  [已解决] 回复[ 10次 ]   点击[ 849次 ]  
xzlt21
[帖 主]   [ 发表时间:2010-02-20 10:49 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-02-17 09:42
我可能学习的很慢o 。应为我还要上学的!希望大家给我提出错误!(最好讲得详细一点,因为我很笨的- -!)
我希望大家多多和我交流!这样才可以相互提升!myQQ:631957202
好了!开始吧

……………………第一章……………………
1.1-1.10小结
1.汇编指令是机器指令的助记符,同机器指令一一对应。
2.每一种CPU都有自己的汇编指令集。
3.CPU可以直接使用的信息在存储器中存放。
4.在存储器中,指令和数据没有任何区别,都是二进制信息。
5.存储单元从零开始顺序编号。
6.一个存储单元可以存储8个bit(比特),即8位二进制数。
7.1Byte(字节)=8bit(比特)   1KB(千字节)=1024B(字节)   1MB(兆字节)=1024KB(千字节)
  1GB(吉字节)=1024MB(兆字节)
8.每个CPU芯片都有许多管脚,这些管教和总线相连。也可以说,这些管脚引出总线。一个CPU可以引出

3种总线的宽度标志了这个CPU的不同方面的性能:
          地址总线的宽度决定了CPU的寻址能力;
          数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量;
          控制总线的宽度决定了CPU对系统中其它器件的控制能力。
检测点1.1
1.一个CPU的寻址能力为8KB,那么他的地址总线的宽度为(13)。
  因为:一个CPU的地址总线有N根,就可以说这个CPU的地址总线的宽度为N,所以寻址能力8KB=2^N
  8KB(8*1024B)=2^N   N=13
2.1KB的存储器有(1024)个存储单元。存储单元从编号(0)到(1023)。
因为:8个bit组成一个Byte,即8个二进制位。所以一个1KB存储器有1024存储单元。存储器被划分成
      若干个存储单元,每个存储单元从0开始顺序编号,因为这个存储器有1024个存储单元,所以编
号从0~1023.
3.1KB可以存储(8192)个bit,1024个Byte。
  因为:1KB=1024B=1024*8bit
4.1GB=2^30 Byte   1MB=2^20 Byte   1KB=2^10 Byte
  因为:1Byte(字节)=8bit(比特)   1KB(千字节)=1024B(字节)   1MB(兆字节)=1024KB(千

字节)
  1GB(吉字节)=1024MB(兆字节) 
5.8080、8088、8086、80286、80386的地址总线宽度分别为16根、20根、24根、32根,则他们的寻址能
  力分别为(64KB)、(1MB)、(16MB)、(4GB)。
  分析:因为一个CPU有N根地址总线,则可以说这个CPU的地址总线宽度为N,这样的CPU寻址能力为2的 

 N次方个Byte。
  所以它们的寻址能力分别为  
 (2的16次方/1024 KB)  (2的20次方/1024*1024 MB) (2的24次方/1024*1024MB) 
 (2的24次方/1024*1024*1024 GB)
6.8086、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则他们可
  一次传送的数据为:(1)B、(1)B、(2)B、(2)B、(4)B。
  因为:8根数据总线可传送1个8位二进制即1Byte, 16根数据总线一次可传2Byte  
7.从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。
  分析: 8086宽度是16 ,一次可传2Byte, 所以要传 1024/2 = 512 次 
         80386宽度是32 ,一次可传4Byte,所以要传 1024/4 = 256次
8.在存储器中数据和程序以(二进制)形式存放。(知识点就不说了)
abob
[第1楼]   [ 回复时间:2010-02-20 14:50 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
落个深深的脚印^_^
xzlt21
[第2楼]   [ 回复时间:2010-02-21 18:43 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-02-17 09:42
……………………第二章……………………
检测点2.1
mov ax,62627  AX= 62627 F4A3 
mov ah,31H    AX= 31A3 
mov al,23H    AX= 3123 
add ax,ax     Ax= 6246 
mov bx,826CH  BX= 826C 
mov cx,ax     CX= 6246 
mov ax,bx     AX= 826C 
add ax,bx     AX= 04D8 
mov al,bh     AX= 0482 
mov ah,bl     AX= 6C82 
add ah,ah     AX= D882 
add al,6      AX= D888 
add al,al     AX= D810 
mov ax,cx     AX= 6246 

(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 
mov ax,2 
add ax,ax 
add ax,ax 
add ax,ax

检测点2.2
1.给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为(00010H)到(1000FH)
  
  分析:偏移地址为16位,16位二进制数可表示的最大数范围是:2^16 = 64KB,变化范围为0~FFFFH    
  。根据公式:段地址×16+偏移地址=物理地址。题目中  段地址为0001H,即:CUP的寻址范围为:  
  0001H×16+0H=00010H  0001H×16+FFFFH=1000FH。

2.有一数据存放在内存20000H单元中,献给顶端地址为SA,若想用偏移地址寻到此单元。则SA满足的条  
  件是:最小为(1001H),最大为(2000H)
  
  分析:如果用SA×16+(0H~FFFFH)=20000H 则 SA×16=10001
  
  因为一个段地址的起始地址一定是(10进制16)或者说(10H )的倍数,一个数据的16进制形式左移1位  
  ,相当于乘以16,即是左移后的段地址能被10H整除,所以偏移地址就不能取到FFFFH了,即偏移地址  
  的取值范围为 0H~FFF0H了。

  所以最小:SA×16+FFF0H=20000H         最大:SA×16+0H=20000H

            SA=1001H                           SA=2000H

3.提示,反过来思考一下,当段地址给定为多少,CPU无论怎么变化偏移地址都无法寻到20000H 

  单元? 
  
  1001>SA>2000

  分析:同上

检测2.3

  下面的3条指令执行后,CPU几次修改IP?都是什么时候?最后IP中的值是多少?

  mov ax,bx 
  
  sub ax,ax
  
  jmp ax

  答:4次。最后值是0000H
 
  分析:在读入mov ax,bx之前,IP指向mov ax,bx 首地址A

  第一次:读入mov ax,bx后,  IP指向sub ax,ax  首地址B

  第二次:执行完mov ax bx后,读入sub ax,ax后,IP指向jmp ax首地址C
  
  第三次:执行完sub ax,ax后,读入jmp ax后,IP指向下一指令首地址D
  
  第四次:执行完jmp ax后,IP=ax即0000H      最后IP地址为0000H

实验一
 
  Debug功能:R命令:查看、改变CPU寄存器的内容;

             D命令:查看内存中的内容;

             E命令:改写内存中的内容;

             U命令:将内存中的机器指令翻译成汇编指令;

             T命令:执行一条机器指令;

             A命令:以汇编指令的格式在内存中写入一条机器指令。
             
实验任务:

1.ax=0002 bx=4026

2.ax=100(16进制)因为2^8=256是十进制。

3.不变(我的日期地址fff0:f5 fc)

4.不变      

分析:3和4,
      因为:fff0:f5 fc和b8100h属于只读存储器!
dwtqin
[第3楼]   [ 回复时间:2010-02-22 17:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-20 17:09
一起努力学习。
xzlt21
[第4楼]   [ 回复时间:2010-02-22 22:31 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-02-17 09:42
……………………第三章……………………
3.4 mov、add、sub指令

    mov指令形式:mov 寄存器,数据
                 mov 寄存器,寄存器
                 mov 寄存器,内存单元
                 mov 内存单元,寄存器
                 mov 寄存器,内存单元
                 mov 段寄存器,寄存器
                 mov 寄存器,段寄存器
    add指令形式:add 寄存器,数据
                 add 寄存器,寄存器
                 add 寄存器,内存单元
                 add 内存单元,寄存器
    sub指令形式:sub 寄存器,数据
                 sub 寄存器,寄存器
                 sub 寄存器,内存单元
                 sub 内存单元,寄存器
add指令和sub指令不可以对段地址进行操作。

3.1~3.5小结
1.字在内存中存储时,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,
高位字节存放在高地址单元中。
2.用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
3.[address]表示一个偏移地址为address的内存单元。
4.在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应。
5.mov、add、sub是具有两个操作对象的指令。jmp是具有一个操作对象的指令。
6.可以根据自己的推测,在Debug中实验指令的新格式。

检测点3.1

1.在Debug中,用“d 0:0 1f”查看内存,结果如下。
  0000:0000  68 10 A7 00 8B 01 70 00-16 00 A9 03 8B 01 70 00   h.....p.......p.
  0000:0010  8B 01 70 00 B9 06 12 02-40 07 12 02 FF 03 12 02   ..p.....@.......

  下面的程序执行前,ax=0,bx=0,写出每条汇编指令执行完后相关寄存器中的值。
  mov ax,1
  mov ds,ax
  mov ax,[0000]     ax=018b
  mov bx,[0001]     bx=7001
  mov ax,bx         ax=7001
  mov ax,[0000]     ax=018b
  mov bx,[0002]     bx=0070
  add ax,bx         ax=01fb
  add ax,[0004]     ax=08b4
  mov ax,0          ax=0000
  mov al,[0002]     ax=0070
  mov bx,0          bx=0000
  mov bl,[000c]     bx=00ff
  add al,bl         ax=006f
  提示,注意ds的设置。

2.写出CPU执行每条指令后,CS,IP和相关寄存器中的数值。
  mov ax,6622H
  cs=2000  ip=3  ds=1000  ax=6622  bx=0
  
  jmp 0ff0:0100
  cs=0ff0  ip=0100  ds=1000  ax=6622  bx=0
  
  mov ax,2000H
  cs=0ff0  ip=0103  ds=1000  ax=2000  bx=0

  mov ds,ax
  cs=0ff0  ip=0105  ds=2000  ax=2000  bx=0

  mov ax,[0008]
  cs=0ff0  ip=0108  ds=2000  ax=c389  bx=0

  mov ax,[0002]
  cs=0ff0  ip=010b  ds=2000  ax=ea66  bx=0

  再次体会:数据和程序我认为没有区别都是二进制存放,可它又有区别,看CPU是把她当数据还是当程  

            序,由cs:ip执行的指令是程序,由ds执行的是数据。

第三章……栈的综述

1.8086CPU提供了栈操作机制,方案如下。
  在SS、SP中存放栈顶的段地址和偏移地址;
  提供入栈和出栈指令,它们根据SS:SP指示的地址,按照栈的方式访问内存单元。
2.push指令的执行步骤:①SP=SP-2;②向SS:SP指向的字单元中送入数据。
3.pop指令执行步骤:①从SS:SP指向的字单元中读取数据;②SP=SP-2。
4.任意时刻,SS:SP指向栈顶元素。
5.8086CPU只记录栈顶,栈空间的大小我们要自己管理。
6.用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈的顺序相反。
7.push、pop实质上是一种内存传送指令,注意他们的灵活应用。

第三章……段的综述
  我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元。这完全是我们

自己的安排。
  
  我们可以用一个段存放数据,将它定义为“数据段”;
  我们可以用一个段存放代码,将它定义为“代码段”;
  我们可以用一个段当做栈,将它定义为“栈段”。

  我们可以这样安排,但若要让CPU按照我们的安排来访为这些段,就要:

  对于数据段,将它的段地址放在DS中,用mov、add、sub等访问内存单元的指令时,CPU就将我们定义的

数据段中的内容当做数据来访问;
  对于代码段,将它的段地址放在CS中,将段中第一条指令的偏移地址放在IP中,这样CPU就将执行我们

定义的代码段中的指令;
  对于栈段,将它的段地址放在SS中,将栈顶单元的偏移地址放在SP中,这样CPU在需要进行栈操作的时

候,比如执行push、pop指令等,就将我们定义的栈段当做栈空间来用。

  可见,不管我们如何安排,CPU将内存中的某段内容当做代码,是因为CS:IP指向了那里;CPU将某段内

存当做了栈,是因为SS:SP指向了那里。我们一定要清楚,什么是我们的安排,以及如何让CPU按我们的安

排行事。要非常清楚CPU的工作原理,才能在控制CPU按我们的安排运行的时候做到游刃有余。

  一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关

键在于CPU中寄存器的设置,即CS、IP、SS、DS的指向。

检测点3.2

(1)mov ax,2000H
   mov ss,ax
   mov sp,0010H
  
(2)mov ax,1000h 
   mov ss,ax 
   mov sp,0000h

实验任务二

1.使用Debug,将上面的程序段写入内存,啄条执行,根据指令执行后的实验 
  运行情况填空。 

  mov ax,ffff 
  mov ds,ax 

  mov ax,2200 
  mov ss,ax 

  mov sp,0100 

  mov ax,[0]  ;ax=5BEAH 
  add ax,[2]  ;ax=5CCAH 
  mov bx,[4]  ;bx=30F0H 
  add bx,[6]  ;bx=6027H 

  push ax     ;sp=00FEH  ;修改的内存单元的地址是2200:00FE   内容为 5CCAH 
  push bx     ;sp=00FCH  ;修改的内存单元的地址是2200:00FC   内容为 6027H 
  pop ax      ;sp=00FEH  ;ax=6027H 
  pop bx      ;sp=0100H  ;bx=5CCAH 

  push [4]    ;sp=00FE  ;修改的内存单元的地址是00FE   内容为30F0H 
  push [6]    ;sp=00FC  ;修改的内存单元的地址是00FC   内容为2F38H 

2.   -d 2000:0 f
     2000:0000 00 00 00 00 00 00 00 20-00 00 08 01 39 0B 9D 05  
其中059D是标志寄存器的值;0B39是CS的值;0108是IP的值;2000是AX的值。
378350770
[第5楼]   [ 回复时间:2010-02-23 23:00 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-02-23 22:46
1.一个CPU的寻址能力为8KB,那么他的地址总线的宽度为(13)。 
  因为:一个CPU的地址总线有N根,就可以说这个CPU的地址总线的宽度为N,所以寻址能力8KB=2^N 
  8KB(8*1024B)=2^N   N=13 

这段我有些看不懂,你可否帮我解释清楚些,是怎么得到他的宽度为13的?
xzlt21
[第6楼]   [ 回复时间:2010-02-24 12:48 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-02-17 09:42
8*1024=8192  2^13=8192   (一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元,即8KB)书上原话!!
xzlt21
[第7楼]   [ 回复时间:2010-02-24 14:57 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-02-17 09:42
……………………第四章……………………
程序返回指令:mov ax,4c00H
              int 21H

第四章……操作系统的外壳

  操作系统是由多个功能模块组成的庞大、复杂的软件系统。任何通用的操作系统,都要提供一个称为

shell(外壳)的程序,用户(操作人员)使用这个程序来操作计算机系统进行工作。

  DOS中有一个程序command.com,这个程序在DOS中称为命令解释器,也就是DOS系统的shell。

  DOS启动时,先完成其他重要的初始化工作,然后运行command.com,command.com运行后,执行完其他

的相关任务后,在屏幕上显示出由当前盘符和当前路径组成的提示符,比如:“c:\”或“c:\windows”

等,然后等待用户的输入。

  用户可以输入所要执行的命令,比如,cd、dir、type等,这些命令由command执行,command执行完这

些命令后,再次显示由当前盘符和当前路径组成的提示符,等待用户的输入。
  
  如果用户要执行一个程序,则输入该程序的可执行文件的名称,command首先根据文件名找到可执行文

件,然后将这个可执行文件中的程序加载入内存,设置CS:IP指向程序的入口。此后,command暂停运行,

CPU运行程序。程序运行结束后,返回到command中,command再次显示由当前盘符和当前路径组成的提示

符,等待用户输入。

  在DOS中,command处理各种输入;命令或要执行的程序的文件名。我们就是通过command来进行工作的




第四章……汇编程序从写出到执行的过程

编程→1.asm→编译→1.obj→连接→1.exe加载→内存中的程序→运行
(edit)      (masm)       (link)    (command)            (CPU)


实验3……编程、编译、连接、跟踪
2.用DEBUG跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。

第一次:mov ax,2000H ax=2000 ip=0003
第二次:mov ss,ax   
第三次:mov sp,0     ax=2000 sp=0000
第四次:add sp,10    ax=2000 sp=000a
第五次:pop ax       ax=0000 sp=000c
第六次:pop bx       bx=0000 sp=000e
第七次:push ax      ax=0000 sp=000c
第八次:push bx      bx=0000 sp=000a
第九次:pop ax       ax=0000 sp=000c
第十次:pop bx       bx=0000 sp=000e
栈顶内容都是0000。
3.psp内容:CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 FA 0E 8A 03
378350770
[第8楼]   [ 回复时间:2010-02-25 21:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-02-23 22:46
我刚学这个,什么也不懂,mov add 都还知道是怎么个写法,可下面的这些具体实现什么样的功能,有那些效果,有些看不懂,这每行代码都实现什么?
mov ax,62627  AX= 62627 F4A3  
mov ah,31H    AX= 31A3  
mov al,23H    AX= 3123  
add ax,ax     Ax= 6246  
mov bx,826CH  BX= 826C  
mov cx,ax     CX= 6246  
mov ax,bx     AX= 826C  
add ax,bx     AX= 04D8  
mov al,bh     AX= 0482  
mov ah,bl     AX= 6C82  
add ah,ah     AX= D882  
add al,6      AX= D888  
add al,al     AX= D810  
mov ax,cx     AX= 6246
chen000
[第9楼]   [ 回复时间:2010-03-18 21:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-09 18:36
谢谢楼主...
xzlt21
[第10楼]   [ 回复时间:2012-07-02 08:58 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-02-17 09:42
此贴由 贴主 于 [ 2012-07-02 08:58 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved