. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第五章程序5.9的改进版  [已解决] 回复[ 3次 ]   点击[ 286次 ]  
regex
[帖 主]   [ 发表时间:2010-01-02 16:21 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
我利用前面栈段的push和pop来实现两个内存地址的复制。 请大家指正。
d:\asm>type 59.asm
assume  cs:code
code    segment

        mov ax,0ffffh
        mov ss,ax
        mov sp,0
        mov ax,0020h
        mov ds,ax
        mov bx,0
        mov cx,12

s:      push ss:[bx]
        pop  [bx]
        inc bx
        loop s

        mov ax,4c00h
        int 21

code    ends
end

d:\asm>

实验结果:
运行前内存地址情况:
-d ffff:0 b
FFFF:0000  EA 5B E0 00 F0 30 38 2F-33 31 2F 30               .[...08/31/0
-d 20:0 b
0020:0000  00 00 00 00 00 00 00 00-00 00 00 00               ............
-r
AX=0000  BX=0000  CX=0020  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=13A4  ES=13A4  SS=13B4  CS=13B4  IP=0000   NV UP EI PL NZ NA PO NC
13B4:0000 B8FFFF        MOV     AX,FFFF
(过程略)
运行后内存地址情况:
-d ffff:0 b
FFFF:0000  EA 5B E0 00 F0 30 38 2F-33 31 2F 30               .[...08/31/0
-d 20:0 b
0020:0000  EA 5B E0 00 F0 30 38 2F-33 31 2F 30               .[...08/31/0
-
-
即:实现了两块内存的复制
regex
[第1楼]   [ 回复时间:2010-01-02 16:42 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
疑问:由于栈操作是以字节为单位的。我刚才把循环12改成13, 得到的结果也一致。这是为什么呢?
regex
[第2楼]   [ 回复时间:2010-01-02 22:08 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
疑问:由于栈操作是以字节为单位的。我刚才把循环12改成13, 得到的结果也一致。这是为什么呢?
------------------
回复:错了, 找操作应该是以【字】为单位的。 更正一下。
regex
[第3楼]   [ 回复时间:2010-01-07 01:35 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
此贴由 贴主 于 [ 2010-01-07 01:35 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved