汇编的两道题

2024-02-09 00:28
文章标签 汇编 两道

本文主要是介绍汇编的两道题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.编写一个在显示器上显示一个笑脸字符的程序
看这段程序的结构,可以看出,每个代码段,带有segment的必须用ASSUME 来进行段分配。

PROG1 SEGMENT;PROG1段的开始ASSUME CS:PROG1;PROG1(自己命名的,叫啥都可以)段对应代码段必须有段分配这步
START:MOV DL,1;将要显示的字符的的ASCII码值放到DL中MOV AH,02H;功能号02H调用,写202 02H都行,显示单个字符int 21H ;DOS功能号调用匹配的中断  20H为程序结束中断,可返回DOS操作。MOV AH,4CH;DOS程序终止,为DOS功能号,AL通常设置为0INT 21H;因为调用了DOS 功能,所以要用INT 21H
PROG1 ENDS;段结束END START

对于start的问题。
Start只是一个标号,可以改名字。
表示程序的开始 end start 就是结束,
也有的用main的
2.通过人机对话,从键盘输入一个10进制数字(0~9),查表求键入数字的平方值,存入AL寄存器中,并显示有关的提示信息。试编写汇编语言程序
有点不明白 0DH,0AH,‘$'的作用:
这是把dos系统里的换行(0dh),回车(0ah)组成一个字符串,利用21h,-09h输出字符串功能,在屏幕上输出换行的作法

DATAS SEGMENTTABLE DB 0,1,4,9,16,25,36,49,64,81;数字0~9的平方值BUF DB 'please input a number(0~9):',0DH,0AH,'$';提示信息
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;设置DXMOV DX,OFFSET BUF;设置DX,使字符串首地址=DS:DXMOV AH,9H;显示以$结尾的字符串INT 21HMOV AH,01H;等待输入字符INT 21HAND AL,0FH MOV BX,OFFSET TABLE;BX指向表头地址TABLEMOV AH,0;AX高位字节清零ADD BX,AX;表头地址+键入数字AL,结果存入BXMOV AL,[BX];查表求得平方值MOV AH,4CHINT 21H
CODES ENDSEND START

这篇关于汇编的两道题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/692641

相关文章

逆向学习汇编篇:内存管理与寻址方式

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/3ceeb9ae6d98​​ 在汇编语言的世界中,内存管理和寻址方式是构建程序的基础。理解这些概念不仅对于编写高效的汇编代码至关重要,也是进行逆向工程分析的关键技能。本文将深入探讨内存管理的基本原则和多种寻址方式,并通过代码案例来展示它们的实际应用。 1. 内存管理 内存管理涉及如何分配

汇编快速入门

一.基础知识 1.数据类型 DB(Define Byte,字节类型    占位8位bit == 1字节) 范围:DB可以用来定义(无符号、有符号)整数(包含二、十、十六进制)和字符 语法:a DB  数据个数  数据值 用法:a DB  -1 , 1 , 1000H , 'A' , "ABC" , ?(?是不知道的数值,一般机器自动使用0填充) DW(Define Word,字类型

【java编程(在线笔试)】【链表】两道k个一组翻转链表题目(包含非递归和递归两种解法)

一、给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点也翻转顺序。 1. 非递归解法 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {

x86 汇编中的 “lock“ 指令详解

在深入理解 “lock” 指令之前,我们先来看一下 Qt 源代码中的一段 x86 汇编代码: q_atomic_increment:movl 4(%esp), %ecxlock incl (%ecx)mov $0,%eaxsetne %alret.align 4,0x90.type q_atomic_increment,@function.size q_atomic_increment,.-

解两道四年级奥数题(等差数列)玩玩

1、1~200这200个连续自然数的全部数字之和是________。 2、2,4,6,……,2008这些偶数的所有各位数字之和是________。 这两道题算易错吧,这里求数字之和,比如124这个数的全部数字之和是1+2+4=7。 两题数学解题思路一样,数字之和,数字无非就是0-9这10个数,要求和0可以忽略,所以就是1-9这九个数。那么我们只要算出每个数出现几次就可以了。 第一题: 1

C语言函数是如何变成汇编的

为了说明C语言如何被编译成汇编语言,我们可以通过一个简单的C程序,并使用ARM编译器来生成相应的汇编代码。 // simple.cint add(int a, int b) {return a + b;}int main() {int result = add(5, 3);return result;} 使用ARM编译器生成汇编代码 我们使用 arm-none-eabi-gcc(GN

S3C2440之裸机之汇编点亮LED灯

虚拟机环境:Oracle VM VirtualBoxLinux系统:ubuntu_14.04.6交叉编译工具:[100ask分享的所有文件](https://eyun.baidu.com/s/3b1UtLc)100ask分享的所有文件 > 002_JZ2440资料光盘_20180516(免费) > 资料光盘 > A盘 > tools.zip > arm-linux-gcc-4.3.2.tar

ARM64汇编0C - inlinehook

本文是ARM64汇编系列的完结篇,主要利用前面学过的知识做一个小实验 完整系列博客地址:https://www.lyldalek.top/article/arm 这里只讨论 ARM64 下的 inlinehook,做一个简单的demo,只是抛砖引玉,有兴趣了解更多细节的可以去查找资料,看开源项目。 ARM64 相比 ARM 的 inlinehook 要麻烦不少,因为有很多指令都没

ARM64汇编0B - 函数调用约定

建议先看《CSAPP》的3.7节,讲的很细。我们这里就直接看例子来分析了。 例子 static int func(int a, int b, int c, int d, int e, int f, int g, int h, int i){printf("%s\n", "add all");int x = a + b;return a + b + c + d + e + f + g + h

8088汇编指令速查手册

jmpi是段间跳转指令,用于x86实模式下,       如:BOOTSEG = 0x0c70             jmpi    4, #BOOTSEG       假如当前段CS==00h,那么执行此指令后将跳转到段CS==0x0c70,当然段cs的值也变为0x0c70,接下来将执行指令0x0c70:0004处的指令。 8088 汇编速查手册