• 【汇编语言】新手第一步——HelloWorld & A+B


    国际惯例,HelloWorld。

    这个程序是masm for windows里面的样例程序。按照我自己的理解,对其加上了注释。

    ;完整段的Hello World程序
    DATAS  SEGMENT
         STRING  DB  'Hello World!',13,10,'$'
         ;定义了一个字符串,标号是STRING,其值是字符串首字符的地址。
         ;DB表示的是字符串中每个字符的都是一个字节,每往后加1的时候,地址偏移量加1.
         ;13 CR 回车
         ;10 LF 换行
         ;$作为字符串的结束符
    DATAS  ENDS
    
    CODES  SEGMENT
         ASSUME    CS:CODES,DS:DATAS
         
    START:
         MOV  AX,DATAS
         MOV  DS,AX
         
         LEA  DX,STRING;LEA 获取偏移量,并将其存入DX
         
         MOV  AH,9
         INT  21H ;INT 21H是DOS中断的调用,其执行的操作根据AH里面的值来确定。
                   ;9,表示的是输出字符串,其地址为DS:DX
        ;4CH带返回码结束
         MOV  AH,4CH
         INT  21H
    CODES  ENDS
        END   START

    然后改写了其中的两个数相加的样例。这是从控制台输入,但是只能输入一位。多位数相加正在学习中。

    DATAS SEGMENT
        ;此处输入数据段代码
        TIP1 DB 'PLEASE INPUT A:',13,10,'$'
        TIP2 DB 13,10,'PLEASE INPUT B:',13,10,'$'
        TIP3 DB 13,10,'A + B = $'
    DATAS ENDS
    
    STACKS SEGMENT
        ;此处输入堆栈段代码
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
        MOV AX,DATAS
        MOV DS,AX
        ;TIP ONE
        LEA DX,TIP1
        MOV AH,09
        INT 21H
        ;GET A
        MOV AH,01
        INT 21H
        SUB AL,30H
        MOV CL,AL
        ;TIP TWO
        LEA DX,TIP2
        MOV AH,09H
        INT 21H
        ;GET B
        MOV AH,01
        INT 21H
        SUB AL,30H
        ADD CL,AL
        ADD CL,30H
        ;TIP 3
        LEA DX,TIP3
        MOV AH,09
        INT 21H
        
        ;RESULT
        MOV DL,CL
        MOV AH,02
        INT 21H
        ;TAO LU
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
  • 相关阅读:
    gdb查看内存(转)
    c++ 前置++与后置++的区别
    stl第二级空间配置器详解(1)
    stl空间配置器简介
    套接字描述符就绪条件
    针对TCP连接异常断开的分析
    linux僵尸进程产生的原因以及如何避免产生僵尸进程
    k8s istio 配置域名转发到外部节点机器上
    tinymce增加mathjax 支持数学公式录入渲染
    vue 配置 TinyMCE
  • 原文地址:https://www.cnblogs.com/namenotfound/p/6193943.html
Copyright © 2020-2023  润新知