实验题5
5.程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中老师给看看做的对吗?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,c
mov ss,ax
mov sp,8
mov bx,0
mov cx,8
s:mov ax,a
mov ds,ax
mov al,ds:
mov dx,b
mov ds,dx
add al,ds:
push al
inc dx
loop s
mov ax,4c00h
int 21h
code ends
end start
本帖最后由 china0008 于 2011-3-9 13:53 编辑
思路是对的。但是用 push的方便保存结果这里,忽略了一个问题。压栈是从高地址到低地址压的。也就是说你把 1+1 的结果放在了最后。这样跟上面的数据是不对齐的。还有一个问题 。 栈操作是以 字 单元为单位的 ,本题的结果一 字节 为单位。栈空间明显不够用。 所以还是用mov指令吧。 本帖最后由 超越自我 于 2011-3-9 22:52 编辑
assume cs:code ,ds:data ,ss:stack
data segment
dw 1,2,3,4,5,6,7,8
dw 1,2,3,4,5,6,7,8
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov bx,0
mov cx,8
s: mov ax,
add ax,
push ax
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start 回复 1# 三好学生
start: mov bx,0
mov cx,8
s:mov ax,a
mov ds,ax
mov al,ds:
mov dx,b
mov ds,dx
add al,ds: ; a b段相加
mov dx,c
mov ds,dx
mov ds:,al
inc dx
loop s
mov ax,4c00h
int 21h
code ends
经过老师的提示,我先把a b段相加 然后在把相加后的al字节数据在放到c 段里面 我是这样做的,不知道对不对:
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
codesegment
start: mov ax,b
mov es,ax
mov ax,c
mov ds,ax
mov bx,0
mov cx,8
s:mov al,es:
mov ,al
incbx
loop s
mov bx,0
mov cx,8
s1: mov al,cs:
add,al
inc bx
loop s1
mov ax,4c00h
int 21h
codeends
endstart 本帖最后由 china0008 于 2011-3-15 13:29 编辑
第六题我是这样做的,请各位老师指教
assumecs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
codesegment
start: mov ax,cs
mov ss,ax
mov sp,48
mov bx,0
mov cx,8
s: push cs:
add bx,2
loop s
mov ax,4c00h
int21h
codeends
end start
楼上做的没错。完全正确。你不使用ds是为了减少代码长度吧。呵呵。很好。 3楼的 inc bx是不是应该改为(bx) = (bx) + 2?
6楼:a,b段的段地址是CS的段地址吗?也就是说SS段里存放的好像不是1,2,。。。0ffh ?
页:
[1]