|
主题 : : 【实验5】第五小题两种解法 [待解决] |
回复[ 32次 ]
点击[ 1079次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2010-01-09 12:01 ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
1, 利用三个段空间,DS,ES,SS来实现将a段和b段之和存入c段的目的
D:\ASM>type lab55.asm
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start: mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov ax,c
mov ss,ax
mov sp,0
mov bx,0
mov cx,8
s: mov ax,[bx]
add ax,es:[bx]
mov ss:[bx],ax
inc bx
loop s
mov ah,4ch
int 21
code ends
end start
D:\ASM>
实验结果:
-d ds:0 7
14D9:0000 01 02 03 04 05 06 07 08 ........
-d es:0 7
14DA:0000 01 02 03 04 05 06 07 08 ........
-d ss:0 7
14DB:0000 00 00 00 00 00 00 00 00 ........
程序结束后:
-d ds:0 7
14D9:0000 01 02 03 04 05 06 07 08 ........
-d es:0 7
14DA:0000 01 02 03 04 05 06 07 08 ........
-d ss:0 7
14DB:0000 02 04 06 08 0A 0C 0E 10 ........
-
----------------------------------------------------------------------
第二种方法, 利用两个短, 来实现目的。通过观察,a段和b段相连,所以呢, 可以把ab两段合二为一, 然后利用偏移,使程序精简了些
D:\ASM>
D:\ASM>
D:\ASM>
D:\ASM>type lab55a.asm
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start: mov ax,a
mov ds,ax
mov ax,c
mov es,ax
mov bx,0
mov cx,8
s: mov ax,[bx]
add ax,[bx+10h]
mov es:[bx],ax
inc bx
loop s
mov ah,4ch
int 21
code ends
end start
D:\ASM>
实验结果:
AX=14C6 BX=0000 CX=004F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C4 ES=14C6 SS=14C4 CS=14C7 IP=000D NV UP EI PL NZ NA PO NC
14C7:000D B90800 MOV CX,0008
-d ds:0 1f
14C4:0000 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
14C4:0010 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
-d es:0 7
14C6:0000 00 00 00 00 00 00 00 00 ........
-g 1b
AX=0010 BX=0008 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C4 ES=14C6 SS=14C4 CS=14C7 IP=001B NV UP EI PL NZ NA PO NC
14C7:001B B44C MOV AH,4C
-t
AX=4C10 BX=0008 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C4 ES=14C6 SS=14C4 CS=14C7 IP=001D NV UP EI PL NZ NA PO NC
14C7:001D CD15 INT 15
-p
AX=8610 BX=0008 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C4 ES=14C6 SS=14C4 CS=14C7 IP=001F OV UP EI NG NZ NA PE CY
14C7:001F 7405 JZ 0026
-d ds:0 1f
14C4:0000 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
14C4:0010 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
-d es:0 7
14C6:0000 02 04 06 08 0A 0C 0E 10 ........
-
- | | |
|
|
|
|
[第22楼] [ 回复时间:2010-07-13 16:33 ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
这道题没人用堆栈?……真是……
------------------
回复:
我来用栈
-----------------------------------------------------------------------------------------
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start: mov ax,a
mov ds,ax
mov ax,c
mov es,ax
mov ax,0
mov bx,0
mov cx,8
s1: mov al,[bx]
add al,[bx+10h]
push ax ;结果入栈保存。
;dos默认给没有设定栈段的程序128个字节,所以就不需要定义栈段。
;如果需要, 还是要定义栈段的。
inc bx
loop s1
mov bx,7 ;为了保持数据一致, 所以bx=7
mov cx,8
s2: pop ax ;从栈中逐个取出数据
mov es:[bx],al
dec bx
loop s2
mov ah,4ch
int 21
code ends
end start
-----------------------------------------------------------------------------------------
测试结果:
d:\ASM>debug sy55.exe
-t
AX=14C9 BX=0000 CX=005D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14CC IP=0003 NV UP EI PL NZ NA PO NC
14CC:0003 8ED8 MOV DS,AX
-t
AX=14C9 BX=0000 CX=005D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C9 ES=14B9 SS=14C9 CS=14CC IP=0005 NV UP EI PL NZ NA PO NC
14CC:0005 B8CB14 MOV AX,14CB
-t
AX=14CB BX=0000 CX=005D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C9 ES=14B9 SS=14C9 CS=14CC IP=0008 NV UP EI PL NZ NA PO NC
14CC:0008 8EC0 MOV ES,AX
-t
AX=14CB BX=0000 CX=005D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C9 ES=14CB SS=14C9 CS=14CC IP=000A NV UP EI PL NZ NA PO NC
14CC:000A B80000 MOV AX,0000
-d ds:0 2f
14C9:0000 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
14C9:0010 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
14C9:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-g 29
AX=0002 BX=FFFF CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C9 ES=14CB SS=14C9 CS=14CC IP=0029 NV UP EI NG NZ AC PE NC
14CC:0029 B44C MOV AH,4C
-d ds:0 2f
14C9:0000 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
14C9:0010 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
14C9:0020 02 04 06 08 0A 0C 0E 10-00 00 00 00 00 00 00 00 ................
- | | |
|