汇编语言程序设计实验一

经过过去的五周的汇编语言的学习,现在对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

原文链接: https://www.cnblogs.com/xiongmao-cpp/p/4905933.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/223548

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午12:06
下一篇 2023年2月13日 下午12:06

相关推荐