. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  有个疑问 关于实验四2的结果  [待解决] 回复[ 1次 ]   点击[ 571次 ]  
squaaa
[帖 主]   [ 发表时间:2009-01-28 17:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2009-01-17 11:34
实验四 
第一问 我的解答 
assume cs:code
code segment
  mov ax,20h
  mov ds,ax
  mov bx,0
  mov dx,0
  mov dl,[bx]
  mov ax,0
  mov cx,64
s:mov dl,al 
  mov ah,0
  mov [bx],dl
  inc bx
  inc ax
  loop s

  mov ax,4c00h
  int 21h
code ends
end

第二问是要求用9条指令  。
我的解答
assume cs:code
code segment
  mov ax,20h
  mov ds,ax
  mov cx,64
s:mov [bx],al
  inc bx
  inc al
  loop s
  mov ax,4c00h
  int 21h
code ends
end
然后,debug
结果却是
0B62:000A 43            INC     BX
0B62:000B FEC0          INC     AL
0B62:000D E2F9          LOOP    0008
0B62:000F B8004C        MOV     AX,4C00
0B62:0012 CD21          INT     21
0B62:0014 833E560720    CMP     WORD PTR [0756],+20
0B62:0019 720A          JB      0025
0B62:001B B81C04        MOV     AX,041C
0B62:001E 50            PUSH    AX
0B62:001F E86244        CALL    4484
-g 0008

AX=0020  BX=0000  CX=0040  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B52  SS=0B62  CS=0B62  IP=0008   NV UP EI PL NZ NA PO NC
0B62:0008 8807          MOV     [BX],AL                            DS:0000=20
-d 20:0
0020:0000  20 21 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F    !..............
0020:0010  10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F   ................
0020:0020  20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F    !"#$%&'()*+,-./
0020:0030  30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F   0123456789:;<=>?
0020:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-
在20:00 和20:01两处为什么不正确 ,而偏偏除了这两处别的还都对。想不明白哦。
在缩短程序的时候,不通过寄存器中介,直接由mov [bx],al 完成。
这里我没有给bx ,ax附初值,是不是这的原因,呢 ,请高手指点迷津
yjc173
[第1楼]   [ 回复时间:2009-01-28 22:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-04 12:21
回复:[贴 主]
------------------
assume cs:code 
code segment 
  mov ax,20h 
  mov ds,ax 
  mov cx,64 
s:mov [bx],al 
  inc bx 
  inc al 
  loop s 
  mov ax,4c00h 
  int 21h 
code ends 
end 
    你的这段程序中第三行mov ax,20h,第六行mov [bx],al ;注意此时低位寄存器al中的数据仍为20h,故在20:00 和20:01两处不正确,另外在这两处之后也是错误的,其后依次是22,23,24......;(我已经debug过了,你自己再可以试一次!)
     下面是我做的,给你做参考!
assume cs:code
code segment
        mov ax,20h
        mov ds,ax
        mov bx,0
        mov cx,40h
s:        mov [bx],bx
        inc bx
        loop s
        mov ax,4c00h
        int 21h
code ends
end
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved