第一个汇编程序

代码描述:用80x86汇编,查询输入方式实现,从某输入设备输入128B并存入首地址为BUFFER的内存缓冲区,输入设备的数据口地址是0008H,状态口地址是0020H,状态口的第D0位是读状态位,D0=1表示输入数据有效。

工具介绍:
    dosbox  模拟dos环境   masm  link 和debug的执行环境工具可在此下载
    masm   编译器   asm->obj
    link   连接器   obj->exe

    debug  调试器

使用方法
    在dosbox中将masm  link  debug的文件夹作为c盘。然后就可以运行masm等程序了。
    asm是汇编源程序
    obj是编译后的程序

    exe是连接后的程序

汇编文件asm结构:
    data   segment      #代码段
        xxx
    data   ends

    stack  segment      #堆栈段
        xxx
    stack   ends
  
    code   segment      #代码段
    main  proc far                       #入口地址
    assume   CS:code  DS:data  SS:stack  #指定代码段,数据段,堆栈段地址;将数据段的起始地址存到DS寄存器中… 
    start:                               
          xxx    #汇编指令,代码
    main  endp                           
    code  ends

     end  start

汇编指令详解:

   in  out   输入输出I/O指令

   move  lea 转移指令

   test   判断指令

    jnz   跳转指令   不等于跳转

   loop  循环指令

   Inc  加1指令

附上代码:

DATASEG     SEGMENT    
     BUFFER    DB  128 DUP(?)
DATASEG     ENDS

CODE        SEGMENT   ;
main proc far;
ASSUME    CS: CODE, DS: DATASEG

START:     MOV    AX,DATASEG;
           MOV    DS, AX;
           MOV    CX, 128;
           lea    BX,BUFFER;

    LL:   MOV    DX, 0020H;
    LLA:  IN     AL, DX       ;
          TEST   AL,00000001B ;
          JNZ    LLA          ;
          
          MOV    DX, 0008H    ;
          IN     AL, DX       ;          
          MOV    [BX],AL      ;          
          INC    BX           ;
          LOOP   LL           ;
   
 main endp       
CODE    ENDS

END  START

代码分析:

    需要在内存区申请128B的内存

    在程序开始后,首先将数据段首地址放入ds数据寄存器,将循环次数放入cx寄存器,将内存区首地址放入bx寄存器。

然后,将状态口的地址放入dx寄存器,用in指令从状态口读取数据,判断读数据是否有效,若无效,则跳转接着判断,若有效则去下一步,从数据口读取数据,

    从数据口读数据的流程为,首先将数据口的地址赋给dx,然后用in指令从数据口读8个字节的数据,放入寄存器bx指向的地址处([bx]是间接寻址,也就是BUFFER的地址),然后bx加1,接着循环128次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值