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技术》第四次作业
    Java第三次作业——面向对象基础(封装)
    《Java技术》第二次作业
    #《Java技术》第一次作业
    Java第十次作业
    Java第九次作业
    Java第八次作业
    Java第七次作业
    Java第6次作业
    Java第五次作业
  • 原文地址:https://www.cnblogs.com/a249189046/p/8250882.html
Copyright © 2011-2022 走看看