首页 > 编程语言 >王爽汇编 课程设计1

王爽汇编 课程设计1

时间:2023-04-05 15:25:35浏览次数:38  
标签:汇编 课程设计 mov si cx dx ax bx 王爽

代码部分

任务: 将实验7中的Power idea公司的数据按照下图显示出来
image

用时3天。

代码行为240行左右。

小结:

  • 在一个模块中,使用了全局的四个寄存器,ax,bx,cx,dx 务必要 使用成对的push-pop相等恢复,不然出现的出错在代码量大了后很难发现

如下:是进行一个 si 寄存器值的除2,因为在写代码的时候是需要用到,但因为没有恢复 dx,导致在写的时候,在高位值多了个1,就算不对了。

push ax
push dx

mov ax,si
mov dx,0
mov cx,10
div cx

pop ax
pop dx

你可以这样写,这样写的代码会更清晰明了。

pusha:
	push ax
	push bx
	push cx
	push dx
	ret

popa:
	pop ax
	pop bx
	pop cx
	pop dx
	ret

call pusha

mov ax,si
mov dx,0
mov cx,10
div cx

call popa

image

assume cs:code,ds:data,ss:stack

data segment
    db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
    db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
    db '1993','1994','1995'
    ;表示21年的21个字符串(4字节)
    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
    dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
    ;表示21年公司总收入的21个dword型数据(4字节)
    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,11430,15257,17800
    ;表示21年公司雇员人数的21个word型数据(2字节)
data ends

d segment
	dd 64 dup(0)
d ends

stack segment
    dd 64 dup(0)
stack ends

code segment
start:
    mov ax,data
    mov ds,ax
    ;mov ax,d
    mov ax,0B800H;
    mov es,ax
    mov ax,stack
    mov ss,ax
    mov sp,128

    mov cx,21
	mov dx,0
    sm:
        call show_line
        inc dh
        loop sm


    mov ax,4c00h
    int 21h

;; dh 行 dl 列
show_line:
    push cx
    push ax
    push dx

    mov ax,stack
    mov ss,ax
    mov si,0 ;; 数据的索引
    mov di,0 ;; 临时变量
    mov ax,0

    ;; 要多出来一行
    mov al,160
    mov ah,1
    mul ah
    mov bx,ax
    
    mov ax,160
    mul dh
    add ax,bx
    mov di,ax ;; 计算 di ,就是数据的行的起始位置

    ;; 计算位置, 就是数据的行数
    mov al,dh   
    mov bh,4
    mul bh

    ;; 计算好数据的位置后,拿到偏移地址
    mov si,ax


;; 加上 列号

	push si
    mov cx,4
    sstr:
        mov al,[si]
        mov byte ptr es:[di],al
        mov byte ptr es:[di+1],01000010B
        inc si
        add di,2
        loop sstr
	;; 64
	pop si 

    ;; 添加6 个空格
    mov cx,6
    call add_space

    ;; 最后 bx 剩的数字 ,就是需要在后面添加 空格的个数

	;; 放大数字
    mov ax,[si+84] ;; 低位放 ax
    mov dx,[si+84].2 ;; 高位放 dx

    mov bx,10
    call add_number
    ;; 在拿 后面的人数的时候,应当是 要以前的位置除以2

    push si
    mov ax,si
    mov bx,2
    div bx
	;;

	;; 7f
    mov si,ax

	;;  放人数
    mov ax,[si+84+84] ;; 低位放 ax
    pop si
    mov dx,0
    mov bx,10
	;; 8c
    call add_number
	;; 8f

	;; 需要添加平均数 ,总收入除以总人数
	;; 添加总金额
    mov ax,[si+84] ;; 低位放 ax
    mov dx,[si+84].2 ;; 高位放 dx

    push si
	push ax
	push dx

	;; 32 位除法
	mov dx,0 ;; dx 要归0
    mov ax,si
    mov bx,2
    div bx

	; 9e
    mov si,ax

	;;  放人数
	mov cx,[si+84+84] ;; 这里是平均数

	pop dx
	pop ax
    pop si

	;; 添加平均数
	call divdh

	;; 计算完后,商放在ax和dx中,余数在cx中
	;; 都不用赋值,可以直接放到屏幕上
	call add_number

	add si,4 ;; si 的 步长 为 4

    pop dx
    pop ax
    pop cx
    ret

;; ax 低位
;; dx 高位
;; bx 长度
;; di 表示显示的起始位置
add_number:
	;; 除到 ax=0,然后再取cx的值加进进去
	mov bx,0
    s_total:
		mov cx,0AH
		call divdh
		inc bx
		push cx

		mov cx,ax
		jcxz ex

		mov cx,0AH
		loop s_total
	
	ex:
		mov cx,bx

		jmp addo
	addo:
		pop ax
		add al,30H
		mov byte ptr es:[di],al
        mov byte ptr es:[di+1],01000010B
		
		add di,2
		loop addo
	
	mov cx,0AH
	sub cx,bx

	call add_space
	ret

clear:
    mov ax,0
    mov bx,0
    mov dx,0
    ret

;; cx 为 添加空格的数量
;; di 为 空格起始显示地址
add_space:
    sad:
        mov byte ptr es:[di],20H
        mov byte ptr es:[di].1,11000010B
        add di,2
        loop sad
    ret

;; ax  低16位
;; dx 高16位
;; cx 除数
divdh:
    push bx
    push ax
    mov ax,dx
    mov dx,0
    div cx

    mov bx,ax ;; 保存结果

    pop ax

    div cx
    mov cx,dx
    mov dx,bx

    pop bx
    ret


code ends

end start

总结

挑战自己,就是要在这种难度中,从未知中探索,不断提升。在写实验时,一定不能去抄网上的代码,一定要自己写。因为如此,才能得到自己的层次上的进步,学习方法的进步,技术的进步。

标签:汇编,课程设计,mov,si,cx,dx,ax,bx,王爽
From: https://www.cnblogs.com/pphboy/p/17289455.html

相关文章

  • 汇编第三章复习之七种寻址
    段寄存器:CS、DS、ES、SS1.指令指令由操作数码和操作数两部分构成操作码:说明计算机要执行的操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分。    操作数:是指令执行的参与者,即各种操作的对象。也就是指令执行操作过程中需要的操作数。2、寻址 1、......
  • 汇编模块化处理
    ;**********************************************************************TITLE整数求和;**********************************************************************;**********************************************************************;*程序运行平台要求......
  • 汇编小程序
    ;***********************************************************;*性能度量;***********************************************************;***********************************************************;*程序运行平台.386.MODELFLAT,STDCALLOPTIONCASE......
  • 汇编中数组的加法运算-包含进位
    ;***************************************************************TITLE数组求和;***************************************************************;***************************************************************;*程序的运行环境,最低环境是386,数据段和代......
  • 我的第一个win32汇编程序
    .386.ModelFlat,stdcalloptioncasemap:none;头文件包含includewindows.incincludekernel32.incincludelibkernel32.libincludeuser32.incincludelibuser32.libincludegdi32.incincludelibgdi32.lib;数据段定义.datahInstancedd......
  • 汇编延时输出随机数
    ;***********************************************************************;TITLE生成20个随机数;***********************************************************************;***********************************************************************;程序运行......
  • win32汇编语言学习之二
        对于汇编语言来说win32环境中只有一种类型,那就是32位整数,例如MessageBoxA的四个参数HWND,LPCTSTR,LPCTSTR,UINT之所以定义成不同的摸样主要是为了说明其用途,我们在汇编环境下调用MessageBoxA时,DOS状态下会是这样的:  pushuType  pushlpCaption  pushlpText ......
  • 逆向——C语言的汇编表示之堆栈图 手把手示例 可以考虑在函数内部加一个局部变量来综
    课程概要来自:https://gh0st.cn/Binary-Learning/C%E8%AF%AD%E8%A8%80.html写得非常详细本章课程需要具备汇编语言基础,若无汇编语言基础是无法去理解课程中所讲的一些知识点和技术细节的;同时也表示本课程是以汇编语言来理解C语言,透过本质理解高级语言。关于本节课的环境:VC6,VC6......
  • C语言逆向分析——IF条件语句的反汇编,要熟悉各种if的姿势以及与或非表达式组合
    第四课IF语句的反汇编判断  第四课练习1intplus(intY,intX){intN=t;if(X<Y)t=t+Y;//t=N+yC}voidmain(){plus(5,4);}第五课IF...ELSE...语句的反汇编判断IF…ELSE…语句的反汇编判断:  ......
  • 16 同步与互斥(二) 内联汇编
    汇编参考GCC工具链使用1引入内联汇编即在C函数中使用汇编去实现某些功能。为什么需要在C代码中引入汇编?C语言在大多数的时候效率都很高,但在某些情况下直接使用汇编效率会更加高效部分功能通过C语言很难实现,这部分代码就需要使用汇编去实现(实现某些功能)在C文件中使用汇编......