汇编语言程序设计——循环结构例4

汇编语言程序设计——循环结构例4

设计目标1

在字数组 VALUE 中查找 -1,找到后将其位置保存到 ADDR 单元。

;6-4.asm  串扫描。在字数组VALUE中查找-1,找到后将其位置保存到ADDR单元。
data segment
	value  dw  1,2,0,3,5,-1,10
	addr  dw  ?
data ends

code segment
	assume cs:code,ds:data
start:
	mov ax,data
	mov ds,ax         ;数据段段地址
	mov ax,-1         ;查找-1
	lea di,value      ;串的偏移地址由di指出
	cld
	mov cx,7           ;7个数值
	repnz scasw
	sub di,2           ;找到后将di减2
	mov addr,di        ;将其位置保存
	mov ah,4ch
	int 21h
code ends
end start

debug结果:

汇编语言程序设计——循环结构例4_第1张图片

 

 

设计目标2

在 X 字数组中查找 -1,找到后,将其删除,后续元素前移。并修改数组单元长度。

设计思路

(1)由于字数组的单元长度是数组元素个数的 2 倍,用右移一位获得元素个数;

(2)用串扫描指令查找 -1。找到时,DI 寄存器已经加 2,指向 -1 的下一个单元,因此可以直接将该元素及以后的元素前移,前移的次数由剩余的 CX 值决定;

(3)如果 -1 是最后的元素,则不用移动,直接将长度减 2;

; 6-8.asm  在字数组X中查找-1,找到后将其删除,后续元素前移。
data segment
  x dw 2,-4,-1,3,5,6,-8
  n dw $-x                                ;数组单元长度
data ends
code segment
assume cs:code,ds:data,es:data
start:     mov ax,data
mov ds,ax
mov es,ax                                    ;附加段和数据段在一起
mov cx,n        
shr cx,1                        ;除以2,得到元素个数
mov ax,-1
    mov di,offset x
    cld
    repne scasw                        ;在x中查找-1,不相等继续查找
    je dele                            ;找到转dele
    jmp out1                        ;没找到则退出
dele:    jcxz let1                        ;-1是最后元素转out1
rept1:                                    ;-1在中间,将后续元素前移
           mov ax,x[di]
           mov x[di-2],ax
          add di,2
           loop rept1
 let1:     sub n,2                            ;数组长度减2 
out1:    mov ah,4ch
           int 21h
code ends
end start

debug结果:

汇编语言程序设计——循环结构例4_第2张图片

你可能感兴趣的:(汇编语言)