O uso de linguagem assembly programa ciclo de design | linguagem assembly (edição Wang Shuang) notas de capítulos de aprendizagem [bx] e instrução loop (2)

5.4 depuração e assembler instruções de diferentes tratamentos masm

我们在Debug中写过类似的指令:
mov ax,[0]
表示将ds:0处的数据送入al中
但是再汇编源程序中,"mov ax,[0]"指令被编译器当作"mov ax,0"处理

Tarefa: a memória 2000: 0,2000: 1,2000: 2,2000: de entrada unidade de dados de três ai, bl, cl, em dl.

realização de depuração:
Aqui Insert Picture Descrição
Aqui Insert Picture Descrição
Compiler Implementação:
Aqui Insert Picture Descrição
Aqui Insert Picture Descrição
Resumo:

 - masm编译器中,[idata]被解释为idata。
 - 可以用寄存器bx来实现,mov bx,1;mov bl,[bx]即可
 - 还可以把段地址显式的表现出来,如mov bl,ds:[1]

5.5 loop e [BX] da combinação

Considere-se um problema: ffff Calculado: 0-ffff: b da unidade de dados e o resultado é armazenado na dx.
(1) armazenar o resultado da operação irá exceder o âmbito da dx?

ffff:0~ffff:b是字节单元,范围为0~255,12个累加不会超出范围。

(2) Can ffff: 0 ~ ffff: b dados para o DX acumulada diretamente?

不行,因为ffff:0~ffff:b中的数据是8位的,不能直接累加到16位寄存器dx中。

(3) pode ffff: 0 ~ ffff: b é acumulado em dl dados, e DH é definido como 0?

不行,dl也是8位寄存器,累加可能造成进位丢失

solução:

mov al,ds:[0]
mov ah,0
add dx,ax
使用以上结构用ax作为中介进行累加

5.4 Os procedimentos usados ​​para atingir o ciclo de instruções anteriormente

assume cs:code
code segment
	mov ax,0ffffh
	mov ds,ax
	mov bx,0
	mov dx,0
	mov cx,12
	
s:	mov al,[bx]
	mov ah,0
	add dx,ax
	inc bx
	loop s
	mov ax,4c00h
	int 21h
	
code ends
end

Aqui Insert Picture Descrição


5.6 Segmento Prefixo

Instrução "mov ax, [bx]", o endereço de offset da célula de memória é dada por bx, e o endereço de segmento dos ds padrão. Estas instruções são exibidas na unidade de acesso à memória, um endereço de segmento especifica explicitamente o "DS:" unidade de memória "CS: ", "ss:" ou "es:", o segmento prefixo na linguagem assembly .


5.7 um espaço seguro

Em 8086 modo, basta escrever para algum espaço de memória é muito perigoso, porque este espaço pode armazenar dados importantes do sistema ou código.

Em geral, o PC, o modo DOS, DOS e outros programas legítimos geralmente não usam 0: 256 bytes de 2ff espaço: 200 a 0. Então, nós usamos este espaço para ser seguro.
Aqui Insert Picture Descrição


5.8 Uso prefixo segmento

Tarefas: ffff: 0 ~ ffff: b unidade de dados de cópia para 0: 200-0: unidades 20b

assume cs:code
code segment
	mov bx,0
	mov cx,12
	
s:	mov ax,0ffffh
	mov ds,ax
	mov dl,[ax]	;(dl)=((ds)*16+(bx)),将ffff:bx中的数据送入dl
	
	mov ax,0020h
	mov ds,ax ;每次循环设置两次ds,代码效率低下
	mov [bx],dl
	
	inc bx
	loop s
	
	mov ax,4c00h
	int 21h
	
code ends
end

otimização de código:

assume cs:code
code segment
	mov ax,0ffffh
	mov ds,ax
	mov ax,0020h
	mov es,ax ;使用两个段寄存器
	mov bx,0
	mov cx,12
	
s:	mov dl,[bx]
	mov es:[bx],dl
	inc bx
	loop s
	
	mov ax,4c00h
	int 21h
code ends
end
Publicado 107 artigos originais · ganhou elogios 68 · vista 7767

Acho que você gosta

Origin blog.csdn.net/weixin_43092232/article/details/105063496
Recomendado
Clasificación