汇编学习-几条简单的汇编指令

检测点2.1

(1) 写出每条汇编指令执行后相关寄存器中的值
mov ax,62627       AX=_____?
mov ah,31H          AX=_____?
mov al,23H           AX=_____?
add ax,ax             AX=_____?
mov bx,826cH     BX=_____?
mov cx,ax            CX=_____?
mov ax,bx            AX=_____?
add ax,bx             AX=_____?
mov al,bh             AX=_____?
mov ah,bl             AX=_____?
add ah,ah            AX=_____?
add al,6               AX=_____?
add al,al              AX=_____?
mov ax,cx            AX=_____?

(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

由于python可以省去很多时间,我使用的python进行的计算,如下图:

代码内容如下:

#!/usr/bin/python3

# -*- coding: utf-8 -*-

__author__=‘sonwnja‘

exam_1=‘‘‘
(1) 写出每条汇编指令执行后相关寄存器中的值
mov ax,62627    AX=_____?
mov ah,31H      AX=_____?
mov al,23H      AX=_____?
add ax,ax       AX=_____?
mov bx,826cH    BX=_____?
mov cx,ax       CX=_____?
mov ax,bx       AX=_____?
add ax,bx       AX=_____?
mov al,bh       AX=_____?
mov ah,bl       AX=_____?
add ah,ah       AX=_____?
add al,6        AX=_____?
add al,al       AX=_____?
mov ax,cx       AX=_____?
‘‘‘
exam_2=‘‘‘
(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
‘‘‘
def exam1():
    print(exam_1)
    print("答案:")
    print(‘mov ax,62627    AX=%x‘ % 62627)

    ax=‘%x‘ % 62627
    ah=ax[-4:-2]
    al=ax[-2:]
    ah=0x31
    ah=‘%x‘ % ah
    ax=str(ah)+str(al)
    print(‘mov ah,31H      AX=%x‘ % int(int(ax,16)))

    al=0x23
    al=‘%x‘ % al
    ax=str(ah)+str(al)
    print(‘mov al,23H      AX=%x‘ % int(int(ax,16)) )

    ax=int(ax,16)+int(ax,16)
    print(‘add ax,ax       AX=%x‘ % ax)

    bx=0x826c
    print(‘mov bx,826cH    BX=%x‘ % bx)

    cx=ax
    print(‘mov cx,ax       CX=%x‘ % cx)

    ax=bx
    print(‘mov ax,bx       AX=%x‘ % ax)

    ax+=ax
    ax=‘%x‘ % ax
    ax=str(ax)[-4:]
    print(‘add ax,bx       AX=%s‘ % ax)

    ah=ax[-4:-2]
    al=ax[-2:]
    bx=‘%x‘ % bx
    bh=bx[-4:-2]
    al=bh
    ax=ah + str(al)
    print(‘mov al,bh       AX=%s‘ % ax)

    al=ax[-2:]
    bl=bx[-2:]
    ah=bl
    ax=ah + al
    print(‘mov ah,bl       AX=%s‘ % ax)

    ah=ax[-4:-2]
    al=ax[-2:]
    ah=int(ah,16)+int(ah,16)
    ax=(‘%x‘ % ah) + al
    print(‘add ah,ah       AX=%s‘ % ax)

    ah=ax[-4:-2]
    al=ax[-2:]
    al=int(al,16)+6
    al=‘%x‘ % al
    ax=ah + al
    print(‘add al,6        AX=%s‘ % ax)

    ah=ax[-4:-2]
    al=ax[-2:]
    al=int(al,16) + int(al,16)
    al=‘%x‘ % al
    al=al[-2:]
    ax=ah + al
    print(‘add al,al       AX=%s‘ % ax)

    ax=cx
    print(‘mov ax,cx       AX=%x‘ % ax)

def exam2():
    print(exam_2)
    print("答案:")
    print(‘mov ax,2H‘)
    print(‘add al,al‘)
    print(‘add al,al‘)
    print(‘add al,al‘)
    ax=0x0002
    ax=‘%x‘ % ax
    print(‘AX=%s 十进制初始值是: %d‘ % (ax,int(ax,16)))
    print(‘经过这4条指令运算后‘)
    ah=‘00‘
    al=ax[-2:]
    al=int(al,16)+int(al,16)
    al=al+al
    al=al+al
    ax=ah+(‘%x‘ % al)
    print(‘AX=%s 换成十进制后的结果: %d‘ % (ax,int(ax,16)))

exam1()
exam2()

原文地址:https://www.cnblogs.com/sonwnja/p/9314369.html

时间: 2024-08-05 06:53:08

汇编学习-几条简单的汇编指令的相关文章

汇编学习笔记(10)-IO端口与指令

一.什么是IO端口 计算机上有很多输入输出设备,比如显示器,打印机,鼠标,键盘.这些设备通过接口和CPU相连接,并提供了一组寄存器给CPU用于控制对应的硬件,为了方便管理这些寄存器,CPU给这个寄存器统一分配地址,如管理内存一样使用这些寄存器,这就称之为IO端口. 二.IO端口输入输出指令 80x86的IO端口编址和内存编址是分开的,使用一组特殊的命令访问IO端口,注意的输入输出是对CPU而言的,比如输入指的是数据进入CPU,相反输出指的是从CPU输出数据到IO端口      输入指令 IN A

基于8086CPU微处理器的汇编学习之MOV指令

汇编指令:MOV的作用是往某个寄存器中存入数值. 格式:mov  寄存器名,数值                数值-->寄存器 mov  寄存器A,存器寄B          B-->A PS:必须前后位数匹配,如: mov   ah,bx     ;error   ah is 8 bit,bx is 16 bit mov   ah, bh    ;right    ah and bh all is 8  bit mov   cx,dx     ;right     cx and dx al

基于8086CPU微处理器的汇编学习之ADD指令

ADD指令: 把两个数值相加,将结果放到第一个寄存器里面. 格式: ADD  寄存器名,数值 ADD  寄存器名,寄存器名 add ax,11 add bx,22 PS:清空数据: mov ax,0000 两者数值的存储容量位数要匹配 ----------------------------------------------------------------------------------------------- 用汇编语言编写一个小程序:1122H + 9000H +   AC02H

基于8086CPU微处理器的汇编学习之PUSH、POP指令

--------------------------------------------- 栈,是一种数据结构,我觉得栈是抽象的,但是它同样也是实际的,因为它在内存中是连续的内存,只不过人们限制了它的使用:后进先出,学数据结构两年了,现在才理解,实在惭愧. push  ax   ;I.sp = sp - 2                  II .取出ax中的数据,放入当前栈顶 pop   ax   ;I.栈顶地址取出数据,放入ax中   II.sp = sp + 2 ------------

AT&T汇编学习笔记

AT&T汇编和intel汇编的区别 (1)在Intel格式中大多使用大写字母,而在AT&T格式中都是用小写字母. (2)在AT&T格式中,寄存器名要加上"%"作为前缀,而在intel格式中则不带前缀. (3)在AT&T的386汇编语言中,指令的源操作数与目标操作数的顺序与在intel的386汇编语言中正好相反.在intel格式中是目标在前,源在后:而在AT&T格式中则是源在前,目标在后.例如,将寄存器eax的内容送入ebx,在intel格式中为&

Arm汇编学习总结

 Arm汇编学习总结: 1. LDR/STR架构 1).ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理. 2).ldr(load register)指令将内存内容加载入通用寄存器. 3).str(store register)指令将寄存器内容存入内存空间中. 4).ldr/str组合用来实现 ARM CPU和内存数据交换. 3级流水线如图所示(PC为程序计数器),流水线使用3个阶段,因此指令分3个阶段执行. ⑴ 取指从存储器装载

汇编学习环境搭建

一 系统环境 win10 pro x86 masm 5.0 下载地址:http://download.pchome.net/development/linetools/detail-9028.html 二 编译环境搭建 1 将masm 5.0 下载下来,这个是免安装版的, 解压缩, 将MASM.EXE所在的目录添加到环境变量path里面. 2 使用方法 <1> 在cmd窗口(注意这个cmd跟下面的command不是一个东西)输入"masm 汇编源码文件;", 回车, 如果编

汇编学习笔记02(寄存器CPU工作原理)

1. 什么是寄存器呢? 就是可以用指令进行读写的部件. 程序员通过改变各种寄存器中的内容实现对CPU的控制. 如果是16位CPU的话, 就是相当于2个存储单元. 2. 字在寄存器中的存储? 8086CPU可以一次性处理两种尺寸的数据 Byte: 字节型数据, 一个字节由8个bit组成, 可以存在8位寄存器中. Word: 字型数据, 一个字型由16个bit组成, 也就是两个字节, 称为这个字的高位字节和低位字节. 3. 常用汇编指令的学习(需要注意的是汇编指令是不区分大小写的) mov ax,

我的汇编学习之路(2):主要术语和概念

对于不折不扣的汇编新手来说,第一部分中出现的很多概念可能不是很明白,于是我决定写更多有价值的文章.所以,让我们开始<我的汇编学习之路>的第二部分的学习. 术语和概念 当我写了第一篇之后,我从不同的读者那获得很多反馈,第一篇中有些部分不明白,这就是本文以及接下来几篇从一些术语的描述开始的原因. 寄存器(Register):寄存器是处理器内小容量的存储结构,处理器的主要功能是数据处理,处理器可以从内存中获得数据,但这是一种低速的操作,这就是为什么处理器为什么要有自己数据存储结构,称为"寄