实验5(5)
本帖最后由 无名似名 于 2018-4-1 15:05 编辑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
cc segment
db 0,0,0,0,0,0,0,0
cc ends
; c不能做标号 不知道为啥 知道的指点一下
code segment
start:mov ax,cc
mov ds,ax
mov ax,a
mov es,ax
mov ax,b
mov ss,ax
; 借用一下栈的段寄存器
mov bx,0
; 初始化地址偏移寄存器
mov cx,8
; 初始化循环量
s:mov ax,es:
add ax,ss:
mov ds:,ax
; 单步算法
; (ax)=((es)*16+(bx))
; (ax)=(ax)+((ss)*16+(bx))
; ((ds)*16+(bx))=(ax)
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
顺便想问一句 assument后的段跟不assument的段有啥区别 c可以用的,你看看报错信息百度一下
我觉得assume相当于指明哪是代码段,哪是什么段 解法一:
assume cs:code
a segment
db 1, 2, 3, 4, 5, 6, 7, 8 ;即使a段不满16字节,也占用0-f内存空间。
a ends
b segment
db 1, 2, 3, 4, 5, 6, 7, 8 ;即使b段不满16字节,也占用10-1f内存空间。
b ends
k segment
db 0, 0, 0, 0, 0, 0, 0, 0 ;即使k段不满16字节,也占用20-2f内存空间。
k ends
code segment
start: mov ax,a
mov ds,ax ;将a段关联ds段。则使用偏移地址即可得到b、k段数据。
mov bx,0h ;编译器默认十进制。
mov cx,8
s:mov ax,0h
add al,
add al, ;b段在a段基础上偏移10H。
mov ,al ;k段在a段基础上偏移20H。
inc bx
loop s
mov ax, 4c00H
int 21H
code ends
end start ;代码33行。
解法二:
assume cs:code
a segment
db 1, 2, 3, 4, 5, 6, 7, 8 ;即使a段不满16字节,也占用0-f内存空间。
a ends
b segment
db 1, 2, 3, 4, 5, 6, 7, 8 ;即使b段不满16字节,也占用10-1f内存空间。
b ends
k segment
db 0, 0, 0, 0, 0, 0, 0, 0 ;即使k段不满16字节,也占用20-2f内存空间。
k ends
code segment
start:mov ax,a
mov ss,ax ;将a段关联ss段。
mov ax,b
mov es,ax ;将b段关联es段。
mov ax,k
mov ds,ax ;将k段关联ds段。因为要将结果存到k段中,
;所以k段关联ds段代码看起来更清爽。
mov bx,0
mov cx,8
s:mov al,ss: ;将a段数据赋予al中。
add al,es: ;将b段数据相加至al中
mov ,al ;将a、b段数据相加结果赋予k段中。
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start ;代码36行。 TZJ5200 发表于 2018-9-7 08:34
解法一:
assume cs:code
解法2不需要指明栈段的偏移地址SP的值吗?我是小白,没看太明白,所以问问 红烧甲鱼 发表于 2018-9-20 12:39
解法2不需要指明栈段的偏移地址SP的值吗?我是小白,没看太明白,所以问问
没用,所以不用指明。 movbx ,0
movcx ,8
s:moval ,cs:
add bx,16
add cs:,al
mov al,cs:
add bx,16
mov cs:,al
inc bx
loop s
这样可以?
页:
[1]