zoukankan      html  css  js  c++  java
  • 汇编语言程序设计实验一

      经过过去的五周的汇编语言的学习,现在对intel 80x86的基本指令已经了解得差不多了。对汇编语言的指令的学习,相当于对c++中的cout、逻辑运算符、关键字和算术运算符等的学习。同时还学习了汇编语言编写程序的基本框架,就如同对c++中的main函数、子函数等的学习,这个学习过程主要了解用汇编语言编写程序的基本格式。因为有C++的基础,也因为平时的自我学习,汇编语言的整个学习过程感觉还是很轻松的。所以在了解了以上的内容后,就开始翻开实验指导书从头开始进行实现程序的编写了。

      第一个汇编实验

      实验内容:X、 Y、 Z、 V 均为字变量,在 X、 Y、 Z、 V 字单元中存放是 16 位带符号数。试编写汇编语言程序完成以下功能:
      ①计算表达式值( V–( X*Y+Z-720)) /X;
      ②将上述表达式运算结果整数放在 SUM1 单元,余数放在 SUM2 单元。

      对于刚开始学习汇编的我,开始写的时候如果不注意就会在一个地方犯下错误,就是在进行X和Y相乘的时候,因为X和Y都是16位的,所以结果算出来是32位的,保存在DX和AX寄存器中。正因为这样,在后面进行+Z和-720的运算过程中,都需要使用cwd对操作数进行位扩展,然后再进行加减运算。否则,可能会得到错误的结果。所以,对于乘除运算需要特别小心(当然,熟悉了之后这个就不再是什么陷阱了^_^)。注意到这个问题之后,只要按照面向过程的编程思想将该表达式的计算过程翻译成汇编语言代码就可以了。

    ;X,Y,Z,V均为字变量,在X,Y,Z,V字单元中存放的是16位带符号数
    ;试编写汇编程序实现
    ;1、计算表达式(V-(X*Y+Z-720))/X的值
    ;2、将计算结果整数放在sum1中,余数放在sum2中
    stack segment stack
        db 1024 dup(?)
    stack ends
    data segment 'data'
        x dw 2
        y dw 3
        z dw -1
        v dw 10
        num dw 720
        sum1 dw ?
        sum2 dw ?
    data ends
    code segment 'code'
        assume cs:code,ds:data,ss:stack
    start:    
        mov ax,data
        mov ds,ax
        mov ax,x
        mov bx,y
        imul bx
        mov bx,ax
        mov cx,dx
        mov ax,z
        cwd
        add bx,ax
        adc cx,dx
        mov ax,num
        cwd
        sub bx,ax
        sbb cx,dx
        mov ax,v
        cwd
        sub ax,bx
        sbb dx,cx
        mov bx,x
        idiv bx
        mov sum1,ax
        mov sum2,dx
        mov ax,4c00H
        int 21h
        
    code ends
    end start
    
    ;sum1=o16aH
    ;sum2=1

      

    ——来自 熊猫 [http://www.cnblogs.com/xiongmao-cpp/]
  • 相关阅读:
    python 利用turtle库绘制五角星
    ci框架memcached使用
    pycharm搭建开发配置,远程调试,数据库配置,git配置等
    织梦dedecms后台发布文章提示“标题不能为空”
    mysql revise
    sublime 新手代码提示
    div+css的属性
    css解决IE6,IE7,firefox兼容性问题
    Sublime常用插件
    Dede CMS如何在文章中增加“附件下载”操作说明
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/4905933.html
Copyright © 2011-2022 走看看