汇编:把数据放入内存

在数据段中定义一个变量a1,其中有1个元素,其元素类型为word类型(即一个元素占2个字节) ,利用2中的子程序得到一个整数,然后将这个整数存储到a1中。
offset指令可以获取一个变量距离数据段起始地址的偏移量,如 mov bx,offset a1这条指令可以将a1这个变量距离数据段起始地址的偏移量求出后保存到bx中。
注意: 2中的子程序将处理结果存放在了cpu内部某个寄存器中,而数据段中的变量是在内存中,所以需要把数据从cpu内部的寄存器送往内存中。

DATAS SEGMENT
    ; 首先定义 word 变量 a1
    a1 dw ?  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov ax, 123
    mov si, offset a1; 记录 a1 的偏移量
    mov [si], ax;
    
    mov ax, [si];调输出函数,这个就不写了
    call output
    ; 输出开始

    MOV AH,4CH
    INT 21H
    
     output proc
	;   调用输出
    mov ch, 0
    mov cl, 10
   	; 每次循环除以 cl
L0: div cl
	; 	除以 cl 以后,结果在 al 中,余数在 ah 中
	;将余数入栈
    push ax
    ; ch 每次增加,记录位数
    inc ch
    mov ah, 0
    cmp al, 0
    ja L0
    
L1: ; 输出函数
	cmp ch, 0
    je over2
    ; 出栈,将栈顶元素存储到 dx 中
    pop dx
    mov dl, dh
    add dl, 48
    mov ah, 2
    int 21h
    dec ch
    jmp L1
    
over2:
	ret 
output endp

CODES ENDS

    END START
    
   

版权声明:本文为weixin_45962741原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。