汇编学习笔记一: 8个8字节数相加

实现8个8字节数相加,首先定义数据段

data segment

  num1 db 12H,34H,56H,78H,9AH,0ABH,0BCH,0CDH

 num2 db 0CDH,0BCH,0ABH,9AH,78H,56H,34H,12H

 sum db 8 dup(?)

 i db 8

data ends

上面的数据是用16进制来进行表示的从segement....ends之间表示的都是数据段

db 表示定义的是单字节数据 ,放在num1,num2,给i赋值为8

sum db 8 dup(?) 可以把sum视为一个大小为8的数组,把?的值赋值给sum 8 次;

num1,num2也可以视为数组,大小为8,数值从db之后的数里面取用;

 定义了一个堆栈段

sseg segment ‘stack’

 top db 1010 dup(0)

sseg ends

这个堆栈大小是1010 ,全部赋值为0 ,首地址为top

然后开始编写代码段

assume 指明变量与寄存器之间的联系,用变量寻址时,把assume定义的作为段地址;

code segment

 assume cs:code,ds:data

 start: mov ax,data

    mov dx,ax

    mov ax,sseg

    mov ss,ax ;算是把ax作为了中专站

           mov sp,offset top ;sp:堆栈寄存器

           

      lea si,num1+7 ; 源变址寄存器

   lea di,num2+7;目的变址寄存器

          lea bx,sum+7

   mov cx,8

   clc ;清除进位cf

pp:

   mov al,[si]

   adc al,[di];带进位加法,进位放在cf

   mov [bx],al

   dec si;--操作

   dec di

   dec bx

   loop pp;循环cx次数

  mov ah,4ch

  int 21h

code ends

 end start

  

猜你喜欢

转载自www.cnblogs.com/masterchd/p/9102336.html