当前位置: 代码迷 >> 汇编语言 >> :问个简单的汇编有关问题
  详细解决方案

:问个简单的汇编有关问题

热度:5743   发布时间:2013-02-26 00:00:00.0
求助:问个简单的汇编问题
求助:怎么用汇编输出一个大小为10的数组B的所有元素?(按0-9的顺序)也就是遍历.谢谢
b   dw   10   dup(1,2,3,4,5,6,7,8,9,10)  
要得到输出
1,2,3,4,5,6,7,8,9,10

------解决方案--------------------------------------------------------
你可以參考一下下面的數組A、B合並的程序:
數組a和數組b各相應元素相加,存放到數組c中的相應單元中。然后將c數組打印!!
-------------------
data segment
a db 128,20,30,40,50,60,70,80,255
b db 130,30,70,50,10,40,10,60,245
c dw ($-b) dup(?)
;防止a、b数组相对应的数据元素相加后结果溢出
;所以将c定义成字型数组[($-b)表示数组b的长度]
data ends

stack segment
dw 8 dup(0)
stack ends

code segment
assume cs:code,ds:data
main: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,0h



xor bx,bx
xor di,di
mov cx,offset b-offset a ;取得数组A或B的数据个数

s1: xor ah,ah
mov al,a[bx]
add al,b[bx]
adc ah,ah
mov c[di],ax
inc bx
add di,2
loop s1 ;循环求和

xor di,di
mov bl,10
mov cx,offset b-offset a
s2: mov ax,c[di]
call dtoc
add di,2
cmp cx,1 ;显示完最后一个数据后不再显示分隔符号
je bye
call dispchar
loop s2

bye: mov ah,4ch
int 21h

dispchar proc near ;显示分隔符号
push ax
push dx
mov dl, ', '
mov ah,2
int 21h
pop dx
pop ax
ret
dispchar endp

dtoc proc near ;使word型数据转变为表示十进数的字符串
push ax
push bx
push dx
push cx
;保护现场
xor cx,cx ;计数器清零
next: div bl
xor dh,dh
mov dl,ah
add dl,30h ;使数字成为可显字符
push dx
inc cx
cmp al,0
je exit ;当商为零时开始出栈
xor ah,ah
jmp next

exit: pop dx ;逐个显示字符
mov ah,2h
int 21h
loop exit

pop cx
pop dx
pop bx
pop ax
;恢复现场
ret
dtoc endp


code ends
end main
  相关解决方案