zoukankan      html  css  js  c++  java
  • 汇编入门学习笔记 16X+Y

    题目:设X和Y均为16位无符号数,写一个求表达式16X+Y的值

    加法实现:

    代码如下:

    DATAS SEGMENT
        ;此处输入数据段代码
        XXX DW 1234H  ;设X为1234H
        YYY DW 5678H  ;设Y为5678H
        ZZZ DD ?      ;用Z来保存最后运算的结果                                                                                                                                                                     
    DATAS ENDS
    
    STACKS SEGMENT
        ;此处输入堆栈段代码
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
         MOV AX,DATAS
        MOV DS,AX
        
        MOV AX,XXX ;讲X送至AX,作为三十二位结果的低十六位储存
        XOR DX,DX
        ADD AX,AX  ;X*2 AX是低十六位,无需接收进位用ADD
        ADC DX,DX  ;DX 是高十六位,需要接收进位,用ADC
        ADD AX,AX  ;X*4
        ADC DX,DX
        ADD AX,AX  ;X*8
        ADC DX,DX
        ADD AX,AX  ;X*16
        ADC DX,DX
        
        ADD AX,YYY ;X+Y;
        ADC DX,0
        
        MOV WORD PTR ZZZ,AX ;将低16位AX中的数据,复制传送到变量Z所指向的两个字节16位存储单元中。
        ;因为ZZZ定义的是双字,所以不能直接MOV ZZZ,AX 而是使用WORD PTR 将ZZZ变量地址当作字变量来使用
        MOV WORD PTR ZZZ+2,DX ;;将高16位DX中的数据传送到相应位置,因为前面低十六位占两个内存单元,所以这里从两个内存单元之后进行储存
        
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START

    乘法实现:

    DATAS SEGMENT
        ;此处输入数据段代码
        XXX DW 1234H  ;设X为1234H
        YYY DW 5678H  ;设Y为5678H
        ZZZ DD ?      ;用Z来保存最后运算的结果                                                                                                                                                                     
    DATAS ENDS
    
    STACKS SEGMENT
        ;此处输入堆栈段代码
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
         MOV AX,DATAS
        MOV DS,AX
        
        MOV AX,XXX ;讲X送至AX,作为三十二位结果的低十六位储存
        MOV DX,16
        MUL DX
       ;MUL 汇编语言无符号数乘法指令   
       ;格式:MUL SRC   执行的操作:   
       ;字节操作数:(AX)←(AL)*(SRC)   
       ;字操作数:(DX,AX)←(AX)*(SRC)   
        ADD AX,YYY ;X+Y;
        ADC DX,0
        
        MOV WORD PTR ZZZ,AX ;将低16位AX中的数据,复制传送到变量Z所指向的两个字节16位存储单元中。
        ;因为ZZZ定义的是双字,所以不能直接MOV ZZZ,AX 而是使用WORD PTR 将ZZZ变量地址当作字变量来使用
        MOV WORD PTR ZZZ+2,DX ;;将高16位DX中的数据传送到相应位置,因为前面低十六位占两个内存单元,所以这里从两个内存单元之后进行储存
        
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
  • 相关阅读:
    java 技术社区!!
    有关 gridview的 (做东西 容易忘记 记下!)
    【C#复习之虚方法vs抽象类】08.4.3 上午
    高分求解答!!!
    【学习笔记】asp.net MVC!
    asp.net ajax 尝试 之很好很强大!08.4.4
    Linux流量监控工具 – iftop (最全面的iftop教程)
    linux下查看某目录占用的空间大小
    基于CentOS的Linux基本网络配置,包括网卡eth0、DNS、Host等
    ubuntu安装ssh服务
  • 原文地址:https://www.cnblogs.com/a249189046/p/8250882.html
Copyright © 2011-2022 走看看