首页 > 编程语言 >「杂文」身为 OIer 的我要在第 7 周速通《汇编语言》,我为什么会做这样的梦(雾)

「杂文」身为 OIer 的我要在第 7 周速通《汇编语言》,我为什么会做这样的梦(雾)

时间:2023-10-20 23:44:45浏览次数:44  
标签:汇编语言 周速通 OIer pop mov si push ax ds

目录

写在前面

编译器为 MASM-v6.11

写的一坨屎。

计算斐波那契数列第 \(i\) 项

最多支持输出 30 位十进制数。

为第 22 行的 cx 寄存器赋值即为所求的项。

.model large

assume cs:code, ss:stack

string segment
  db 30 dup (0), 0
string ends

data segment
	a1 db 1, 29 dup (0)
	a2 db 1, 29 dup (0)
	a3 db 30 dup (0)
data ends

stack segment
	dw 20H dup(0)
stack ends

code segment
main:
	call init
	mov cx, 120 ;number of fib
	
	
	sub cx, 2
main_s1:
	call get_fib
	call move_fib
	loop main_s1

	call transforming
	call show_string

	mov ax, 4c00h
	int 21h





init:
	mov ax, stack
	mov ss, ax
	mov sp, 20H
	ret




get_fib:
	push dx
	push si
	push ax
	push bx
	push cx
	push ds

	mov ax, data
	mov ds, ax

	mov cx, 30 
	mov si, 0
	mov ax, 0
get_fib_s:
	add al, ds:[si]
	mov bl, ds:[si + 30]
	add al, bl

	mov bl, 10
	div bl

	mov ds:[si + 60], ah
	mov ah, 0
	inc si
	loop get_fib_s

	pop ds
	pop cx
	pop bx
	pop ax
	pop si
	pop dx
	ret





move_fib:
	push dx
	push si
	push ax
	push bx
	push cx
	push ds

	mov ax, data
	mov ds, ax

	mov cx, 30 
	mov si, 0
move_fib_s1:
	mov al, ds:[si + 30]
	mov ds:[si], al
	inc si
	loop move_fib_s1

	mov cx, 30 
	mov si, 0
move_fib_s2:
	mov al, ds:[si + 60]
	mov ds:[si + 30], al
	inc si
	loop move_fib_s2

	pop ds
	pop cx
	pop bx
	pop ax
	pop si
	pop dx
	ret

transforming:
	push dx
	push si
	push ax
	push bx
	push cx
	push ds
	push es

	mov ax, data
	mov ds, ax

	mov ax, string
	mov es, ax

	mov cx, 30 
	mov si, 0
transforming_s1:
	mov al, ds:[si + 30]
	add al, '0'
	mov es:[si], al
	inc si
	loop transforming_s1

	mov cx, 15 
	mov si, 0
	mov bx, 29
transforming_s2:
	mov al, es:[si]
	mov dl, es:[bx]
	mov es:[bx], al
	mov es:[si], dl
	inc si
	sub bx, 1
	loop transforming_s2

	pop es
	pop ds
	pop cx
	pop bx
	pop ax
	pop si
	pop dx
	ret





show_string:
	push dx
	push si
	push ax
	push bx
	push cx
	push ds
	push es

  mov dh, 24 ;line
	mov dl, 0 ;column
	mov cl, 000fh ;color

  mov ax, string
	mov ds, ax
	mov si, 0

	mov ax, 0b800h
	mov es, ax

	mov ax, 00a0h
	mul dh
	mov dh, 0
	add ax, dx
	add ax, dx
	mov bx, ax

	mov al, cl
	mov ch, 0
	mov si, 0

show_string_s:
	mov cl, ds:[si]
	jcxz show_string_ok
	mov es:[bx], cl
	inc bx
	mov es:[bx], al
	inc bx
	inc si
	jmp short show_string_s

show_string_ok:
	pop es
	pop ds
	pop cx
	pop bx
	pop ax
	pop si
	pop dx

	ret
code ends
end

写在最后

写的一坨屎。

标签:汇编语言,周速通,OIer,pop,mov,si,push,ax,ds
From: https://www.cnblogs.com/luckyblock/p/17778317.html

相关文章

  • 微机原理笔记 - chap3 - Intel处理器指令系统及汇编语言
    汇编语言基础数据定义:数据传送、算术运算、跳转指令MOV指令“先目的操作数,再源操作数。”MOV指令需要遵循的规则:两个操作数的尺寸必须一致。两个操作数不能同时为内存操作数。movreg,regmovmem,regmovreg,memmovmem,immmovreg,immmovvar2,var1......
  • 汇编实战!手把手教你从“计算器”入门汇编语言
    基于汇编语言的简单整数计算器设计与实现 (此代码仅供学习使用,请勿用作其他用途)摘要本论文介绍了一款使用汇编语言编写的简单整数计算器程序,该程序支持基本的四则运算操作,并能处理包含括号的数学表达式。本文通过分析程序的代码结构,宏定义、数据段、子程序以及关键功能的实......
  • vscode c++ 编译运行配置(信息学竞赛OIer专用)
    vscodec++编译运行OI专用配置在你的文件夹下建立一个名为\(\tt.vscode\)的文件夹。目录是这样的:\(\tt.vscode\)\(\tt|--c\_cpp\_properties.json\)\(\tt|--launch.json\)\(\tt|--tasks.json\)\(\tt.vscode/c\_cpp\_properties.json\){"configurations&qu......
  • 对Oier的几点思考
    最近有机构负责人和我聊起,什么样的学生学校更欢迎?作为信息学竞赛教练,从信息学竞赛的角度出发聊聊这个问题。一、 情绪稳定情绪首先大致分为两类:积极情绪和消极情绪。积极情绪能带来健康,拓宽人的思维。所以我们常常看到许多在家长老师眼中非常活泼甚至调皮的孩子学业成绩也很不......
  • 王道408计组汇编语言部分学习总结
    x86汇编语言指令基础x86处理器中程序计数器PC通常被称为IP 高级语言—>汇编语言—>机器语言x86架构CPU,有哪些寄存器EAX通用寄存器EBXECXEDXESI变址寄存器变址寄存器可用于线性表、字符串的处理EDIEBP堆栈基指针堆栈寄存器用于实现函数调用 ESP堆栈顶指针moveax,ebx#......
  • 汇编语言学习笔记
    汇编语言主要知识点来自《汇编语言》速成指南(全程敲代码),配套材料:王爽老师的《汇编语言》使用DOSbox模拟运行8086CPU汇编语言如有错误,欢迎指正!1.入门简单引入关于8086CPU的知识。CPU内部主要由运算器、控制器、寄存器三大部分组成[1]。运算器:负责算术运算(+-*/基......
  • 当oier来做数学2023高联第三题
    题目:求具有下述性质的最小正整数\(k\):若将\(1,2,\cdots,k\)中的每个数任意染成红色或蓝色,记红色的数从小到大依次为\(a_1,a_2,\cdots,a_n\),蓝色的数从小到大依次为\(b_1,b_2,\cdots,b_m\),下述两个条件至少满足一个:存在九个互不相同的数\(i_1,i_2,\cdots,i_9\),满足\(a_{......
  • 汇编语言
    汇编语言1.1.1    汇编语言有3类指令组成:汇编指令,机器码的助记符,有对应的机器码伪指令,没有对应的机器码,由编译器执行,计算机不执行其它符号,如加减乘除寄存器:    CS和IP这两个寄存器指向的地址是CPU将要执行的指令,其中,CS寄存器是段地址,IP是偏移地址。    栈顶......
  • 1-8汇编语言程序上机调试
    COM_8255EQU0273H ;8255控制口PA_8255EQU0270HPB_8255EQU0271HPC_8255EQU0272H_STACKSEGMENTSTACKDW100DUP(?)_STACKENDSDATASEGMENTWORDPUBLIC'DATA'DATAENDSCODESEGMENTSTARTPROCNEARASSUMECS:CODE,DS:DATA,SS:_STACK......
  • 汇编语言编译环境搭建(MASM+NASM)
    (目录)一、Windows1.下载相关软件DOSBox官网:https://sourceforge.net/projects/dosbox/下载:DOSBox0.74-3-win32-installer.exeMASM5.0网上可以下载2.配置环境双击之后,修改配置文件:windowresolution=1024x768output=ddraw在DOSBox模拟器中挂载MASM5.0mountc:d......