|
主题 : : 我苦思了一个小时做的第六章实验五第五小题 [待解决] |
回复[ 36次 ]
点击[ 2863次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-10-06 17:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-09-25 18:08 |
大家看看我做的对不对,经过调试功能实现.只是觉得方法有前妥当.大家指点一二
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 es,ax
mov ax,b
mov ds,ax
mov bx,0
mov cx,8
s: mov ax,es:[bx]
add [bx],al
add bx,2
loop s
mov ax,c
mov es,ax
mov bx,0
mov cx,8
s1: mov ax,[bx]
mov es:[bx],ax
add bx,2
loop s1
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-10-06 17:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26 |
-u
0C7C:0022 B90800 MOV CX,0008
0C7C:0025 8B07 MOV AX,[BX]
0C7C:0027 26 ES:
0C7C:0028 8907 MOV [BX],AX
0C7C:002A 83C302 ADD BX,+02
0C7C:002D E2F6 LOOP 0025
0C7C:002F B8004C MOV AX,4C00
0C7C:0032 CD21 INT 21
0C7C:0034 16 PUSH SS
0C7C:0035 3C21 CMP AL,21
0C7C:0037 8987BE22 MOV [BX+22BE],AX
0C7C:003B 8997C022 MOV [BX+22C0],DX
0C7C:003F 803E450700 CMP BYTE PTR [0745],00
-g002f
AX=0000 BX=0010 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0C7A ES=0C7B SS=0C79 CS=0C7C IP=002F NV UP EI PL NZ AC PO NC
0C7C:002F B8004C MOV AX,4C00
-d 0c79:0 2f
0C79:0000 01 02 03 04 05 06 07 08-00 00 00 00 00 00 00 00 ................
0C79:0010 02 02 06 04 0A 06 0E 08-00 00 00 00 00 00 00 00 ................
0C79:0020 02 02 06 04 0A 06 0E 08-00 00 00 00 00 00 00 00 ................
-测试了下,结果不太对 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-10-06 18:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26 |
s: mov ax,es:[bx]
add [bx],al
add bx,2
s1: mov ax,[bx]
mov es:[bx],ax
add bx,2
abc段全是db(字节型)数据,LZ用16位寄存器进行计算会出错的啦 | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-10-07 15:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-09-25 18:08 |
谢谢指教,下面是我改正后的程序.
第六章实验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,a
mov es,ax
mov ax,c
mov ds,ax
mov ax,0
mov bx,0
mov cx,8
s1: mov al,es:[bx]
mov [bx],al
inc bx
loop s1
mov ax,b
mov es,ax
mov ax,0
mov bx,0
mov cx,8
s2: mov al,es:[bx]
add [bx],al
inc bx
loop s2
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-10-10 23:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26 |
|
|
|
|
|
[第5楼]
[ 回复时间:2009-10-26 10:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-10-09 11:42 |
|
|
|
|
|
[第6楼]
[ 回复时间:2009-10-28 14:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-09-27 19:48 |
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 es,ax
mov bx,0
mov cx,8
s: mov ax,[bx]
add ax,[bx+16]
mov [bx+32],ax
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第7楼]
[ 回复时间:2009-11-01 11:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2009-10-28 11:47 |
呵,楼上方法不错
不过严格说,应该用 al吧?
俺是初学者,请多指教 | | |
|
|
|
|
[第8楼]
[ 回复时间:2009-11-12 03:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:0
注册日期:2009-10-18 04:41 |
6楼学到几章了?你这种做法固然正确但我想要是刚学到这里的从来还没见过[bx+32]这种做法吧
有点不符王老师的教学理念了哦 | | |
|
|
|
|
[第9楼]
[ 回复时间:2009-11-12 11:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2009-10-29 10:41 |
可以只用一个循环,又不超出6章的范围
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 es,ax
mov ax,b
mov ds,ax
mov ax,c
mov ss,ax
mov bx,0
mov cx,8
s: mov al,ds:[bx]
add al,es:[bx]
mov ss:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第10楼]
[ 回复时间:2009-11-12 13:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:2
注册日期:2008-01-16 11:01 |
回复:[第9楼]
------------------
循环前应该加mov ax,0吧 | | |
|
|
|
|
[第11楼]
[ 回复时间:2009-11-24 12:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-10-30 15:46 |
|
|
|
|
|
[第12楼]
[ 回复时间:2009-11-24 12:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-10-30 15:46 |
回复:[第10楼]
------------------
不用加 | | |
|
|
|
|
[第13楼]
[ 回复时间:2009-12-16 15:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-11-20 22:10 |
个人觉得,要加上mov ax,0,在这里不用加也可得出正确答案,是因为前面赋值未影响到ah,即高位的值也是0,严格地讲,是应该加上的. | | |
|
|
|
|
[第14楼]
[ 回复时间:2010-01-06 16:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
|
|
|
|
|
[第15楼]
[ 回复时间:2010-01-06 18:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-12-14 13:22 |
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 cx,8
mov bx,0
;將A段移至C段
s1: mov al,ds:[bx]
mov es:[bx],al
inc bx
loop s1
mov ax,b
mov ds,ax
mov cx,8
mov bx,0
;將B段與C段累加
s2: mov al,ds:[bx]
add es:[bx],al
inc bx
loop s2
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第16楼]
[ 回复时间:2010-01-07 13:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-03 08:56 |
|
|
|
|
|
[第17楼]
[ 回复时间:2010-01-07 13:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-03 08:56 |
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 cx,8
mov bx,0
mov dx,code
sub dx,3
mov ds,dx
s: mov al,0
mov al,[bx]
add al,[bx+10h]
mov [bx+20h],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第18楼]
[ 回复时间:2010-03-24 12:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2009-07-15 11:17 |
|
|
|
|
|
[第19楼]
[ 回复时间:2010-03-24 12:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2009-07-15 11:17 |
参考楼上各位的代码,然后把我自己的代码改改,这样应该符合要求了吧:
assume cs:code
s segment
db 1,2,3,4,5,6,7,8
s 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,s
mov ds,ax
mov ax,b
mov es,ax
mov ax,c
mov ss,ax
mov sp,0
mov bx,0
mov cx,8
mov ah,0
x: mov al,ds:[bx]
add al,es:[bx]
mov ss:[bx],al
inc bx
loop x
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第20楼]
[ 回复时间:2010-04-10 18:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-02-12 12:25 |
9楼的方法不错,,看来规矩是死的,人是活的,只看你用的恰不恰当。
虽然也曾经想到过使用ss,但却没有去实施 | | |
|
|
|
|
[第21楼]
[ 回复时间:2010-04-14 11:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-15 09:15 |
|
|
|
|
|
[第22楼]
[ 回复时间:2010-04-25 14:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-24 12:43 |
为什么我情况是:存在syntax error : c | | |
|
|
|
|
[第23楼]
[ 回复时间:2015-06-04 21:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2015-06-02 09:14 |
利用a、b、c段的数据是连续的,是否可以利用它们之间的间隔差16和32呢?
6章之前没看到es寄存器的用法。可以不用es、ss寄存器吗?
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 bx,0
mov cx,8
mov ax,0
s: mov al,[bx]
add al,[bx+16]
mov [bx+32],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第24楼]
[ 回复时间:2015-12-15 21:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2015-12-15 17:17 |
回复:[第23楼]
------------------
我想你应该写错了,指令inc bx应该改为add bx,2吧! | | |
|
|
|
|
[第25楼]
[ 回复时间:2017-03-07 20:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2016-12-29 01:01 |
回复:[第24楼]
------------------
23楼没有错! | | |
|
|
|
|
[第26楼]
[ 回复时间:2020-05-07 17:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2020-04-10 16:10 |
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 cx,8;循环次数
mov bx,0
s: mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov dl,[bx]
add dl,es:[bx]
mov ax,c
mov ds,ax
mov [bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
在一次循环中可以重复使用ds,使它指向不同的段。 | | |
|
|
|
|
[第27楼]
[ 回复时间:2021-05-27 11:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2021-05-27 11:02 |
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,b
mov es,ax
mov bx,0
mov cx,8
s:
mov ax,a
mov ds,ax
mov ax,0
mov al,ds:[bx]
add al,es:[bx]
mov dx,c
mov ds,dx
mov ds:[bx],al
inc bx
loop s
code ends
end start | | |
|
|
|
|
[第28楼]
[ 回复时间:2021-05-27 11:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2021-05-27 11:02 |
上面是自己写的方法,已经验证可以(因为程序最好不要修改栈的段寄存器和指令的段寄存器,所以这里没有修改栈段寄存器ss,没有用到[bx+idata],用到的都是目前学过的方法,就是比较麻烦) | | |
|
|
|
|
[第29楼]
[ 回复时间:2021-05-27 11:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2021-05-27 11:02 |
|
|
|
|
|
[第30楼]
[ 回复时间:2022-07-14 10:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2018-10-13 21:08 |
|
|
|
|
|
[第31楼]
[ 回复时间:2022-10-12 13:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2022-10-09 11:54 |
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 bx,0
s:mov al,ds:[100h+bx]
mov ds:[120h+bx],al
mov al,ds:[110h+bx]
add ds:[120h+bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第32楼]
[ 回复时间:2022-10-12 13:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2022-10-09 11:54 |
回复:[第31楼]
------------------
有个问题,没有设置循环次数。。 | | |
|
|
|
|
[第33楼]
[ 回复时间:2022-10-12 13:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2022-10-09 11:54 |
第二种方式
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 bx,0
mov cx,8
mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov ax,c
mov ss,ax
s:mov al,ds:[bx]
mov ss:[bx],al
mov al,es:[bx]
add ss:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|