![]() |
#2
zaixuexi2011-11-25 10:15
![]() data segment 红色标注的地方,你再想想x dw ? array_head dw 3,5,15,23,37,49,52,65,78,99 ;short int array_head[10] = {3,5,15,23,37,49,52,65,78,99}; array_end dw 105 ;short int array_end = 105; n dw 32 ;short int n = 32; data ends code segment main proc far assume cs:code, ds:data start: mov ax,data mov ds,ax mov cx,11 ;short int length = 11; call print ;print(length); mov ax,n mov x,0ffffh ;x = -1; not use ? mov si,0 ;i = 0; compare: cmp array_end[si],ax jle insert ;if (array_end[i] <= n) goto insert; mov bx,array_end[si] mov array_end[si+2],bx ;else array_end[i+2] = array_end[i]; sub si,2 ;i -= 2; jmp short compare ;goto compare; insert: mov array_end[si+2],ax ;array_end[i+2] = n; mov cx,12 ;length = 12; call print ;print(length); ret main endp print proc near pop cx ;j = get return address from stack ? push ax push dx push si ;short int a, b, i; mov si,0 ;i = 0; again: mov ax,array_head[si] ;a = array[i]; mov dl,10 cbw div dl ;a /= 10; add al,30h add ah,30h ;a += 0x3030; mov dh,ah mov dl,al ;b = a; mov ah,2 int 21h mov al,dh mov dl,al mov ah,2 int 21h ;putchar(HIBYTE(a));putchar(LOBYTE(a)); mov dl,08h mov ah,2 int 21h ;printf("\b"); add si,2 ;i += 2; loop again ;while (j--); pop si pop dx pop ax ;release local variable ret print endp code ends end start ![]() |
数组插入元素
DATAS SEGMENT
x dw ?
array_head dw 3,5,15,23,37,49,52,65,78,99
array_end dw 105
n dw 32
DATAS ENDS
CODES SEGMENT
main proc far
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,datas
mov ds,ax
mov cx,11
call print
mov ax,n
mov x,0ffffh
mov si,0
compare:
cmp array_end[si],ax
jle insert
mov bx,array_end[si]
mov array_end[si+2],bx
sub si,2
jmp short compare
insert:
mov array_end[si+2],ax
mov cx,12
call print
ret
main endp
print proc near
pop cx
push ax
push dx
push si
mov si,0
again:
mov ax,array_head[si]
mov dl,10
div dl
add al,30h
add ah,30h
mov dh,ah
mov dl,al
mov ah,2
int 21h
mov al,dh
mov dl,al
mov ah,2
int 21h
mov dl,08h
mov ah,2
int 21h
add si,2
loop again
pop si
pop dx
pop ax
ret
print endp
CODES ENDS
END START