. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测题,通过  [待解决] 回复[ 1次 ]   点击[ 390次 ]  
liuquanhao7232
[帖 主]   [ 发表时间:2010-08-18 11:21 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2010-07-12 08:47
一、将标号a处的8个数累加的和放到标号b处所在的单元中,下面选项中的程序正确的是___4___。 
 1、  assume cs:code 
     code segment 
     mov si,0 
     mov cx,8 
      s: add b,a[si]          ;b代表cs:[8],add cs:[8],cs:[0+si],错了。
      inc si 
      loop s 
      mov ax,4c00h 
      int 21h 
      a db 1,2,3,4,5,6,7,8 
      b db 0 
      code ends 
      end 
 2、  assume cs:code,ds:data 
     data segment 
     a db 1,2,3,4,5,6,7,8 
     b db 0 
     data ends 
     code segment 
     start: 
     mov si,0 
     mov cx,8 
     s: mov al,a[si]        ;cs段里没有把ds指向data段
      add b,al 
      inc si 
      loop s 
      mov ax,4c00h 
      int 21h 
     code ends 
     end start 
 3、  assume cs:code                 ;没有ds:data
     data segment 
     a db 1,2,3,4,5,6,7,8 
     b db 0 
     data ends 
     code segment 
     mov ax,data 
     mov ds,ax 
     mov si,0 
     mov cx,8 
     start: 
      mov al,a[si]            ;因为assume中没有ds:data,所以这里的a[si],是cs:[a+si]
      add b,al 
      inc si 
      loop start 
      mov ax,4c00h 
      int 21h 
     code segment 
     end 
 4、  assume cs:code,ds:data 
     code segment 
      p: mov si,0 
      mov cx,8 
      mov ax,data 
      mov ds,ax 
      s: mov al,a[si] 
      mov ah,0 
      add b,ax 
      inc si 
      loop s 
      mov ax,4c00h 
      int 21h 
      code ends 
      data segment 
      a db 1,2,3,4,5,6,7,8 
      b dw 0 
      data ends 
      end p 



二、下列说法中正确的是__2____。 
 1、  当数据的标号不在代码段时,只要用assume伪指令将数据段和相应的段寄存器连接起来就可以了。 
 2、  数据标号和地址标号唯一的区别就是,数据标号既表示内存单元的地址,还表示内存单元的长度,而地址标号只表示内存单元的地址。 
 3、  直接定址表只可以存储数据的地址,不可以存储程序段的地址。 
 4、  在中断服务程序用到直接定址表时,和不在中断服务程序的使用一样,直接调用即可。 
关于2,有人说还有一个区别就是地址标号只能放在cs段里。但我觉得这题的重点是要说明数据标号和地址标号代表什么,而不是放什么地方。但前面的一个唯一,我也觉得这题不严密。我觉得应该是这样“ 数据标号和地址标号有一个区别就是,数据标号既表示内存单元的地址,还表示内存单元的长度,而地址标号只表示内存单元的地址。”
三、关于直接定址表描述错误的是 1
 1、  直接定址表和数据标号一样只是用来标记地址的。    
 2、  直接定址表可以方便的编写一些查表类的程序。 
 3、  直接定址表中包含了数据长度信息。 
 4、  直接定址表的数据可以定义在代码段。 
第一个错,因为它还指明了数据的长度。
haojunyu
[第1楼]   [ 回复时间:2010-12-19 10:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-11-16 21:58
首先谢谢楼主的分析,其次第一题的第一个选项中add b,a[si]连编译都通不过,我个人分析是因为编译器将b,a【si】当成内存单元,而add 内存1,内存2编译通不过的,当我将其改为mov al,a[si]   add b,al就通过了,然后就出现了楼主所提到的那个问题
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved