狂潮丶 发表于 2013-8-4 23:38:03

Assembly language 课程设计1

课程设计1
assume cs:codesg, ds:data, es:data2

data segment
    db 32 dup(20H)
data ends

data2 segment
    ; 年份
    db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
    db '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
    db '1991', '1992', '1993', '1994', '1995'
   
    ; 收入
    dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479
    dd 140417,197514, 345980, 590827, 803530, 1183000, 1843000
    dd 2759000, 3753000, 4649000, 5937000
   
    ; 雇员数
    dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793
    dw 4037, 5635, 8226, 11542, 14430, 15257, 17800
data2 ends

codesg segment
start:
    mov ax, data
    mov ds, ax
    mov ax, data2
    mov es, ax
   
    mov cx, 21
    mov bp, 0       ; 年份的首地址
    mov bx, 54H   ; 收入的首地址
    mov di, 0a8H    ; 雇员数的首地址
    mov dh, 4       ; 从第4行开始逐行显示表格
    mov dl, 0       ; 从第0列显示每行信息
s:
    push cx
    push dx
    mov si, 0       ; 字符串的首地址
    ; 复制年份
    mov ax, es:
    mov , ax
    mov ax, es:2
    mov 2, ax
    add si, 9       ; 9列显示年份
   
    ; 复制收入
    mov ax, es:    ; 收入的低16位
    mov dx, es:2   ; 收入的高16位
    call dtoc
    add si, 9          ; 9列显示收入
   
    ; 复制雇员数
    mov ax, es:
    mov dx, 0
    call dtoc
    add si, 9          ; 9列显示雇员数
   
    ; 复制人均收入
    mov ax, es:    ; 收入的低16位
    mov dx, es:2   ; 收入的高16位
    div word ptr es:
    mov dx, 0
    call dtoc
   
    mov byte ptr 3, 0 ; 字符串结束标志设为0
    pop dx
    mov cl, 2             ; 字符显示为绿色
    call show_str
    inc dh                ; 行数+1
    add bp, 4             ; 下一个年份
    add bx, 4             ; 下一个收入
    add di, 2             ; 下一个雇员数
    pop cx
    loop s
   
    mov ax, 4c00H
    int 21H
   
; 子程序dtoc
dtoc:
    push bx
    push cx
    push si
   
    mov bx, 0
s00:
    mov cx, ax
    jcxz ok
    mov cx, 10
    call divdw
    add cx, 30H       ; 余数转换为ASCII
    push cx         ; 余数入栈
    inc bx            ; 数字位数+1
    jmp short s00
ok:
    mov cx, bx
c2m:
    pop bx
    mov , bl
    inc si
    loop c2m
   
    pop si
    pop cx
    pop bx
    ret
   
; 子程序divdw
divdw:
    push bx
   
    mov bx, ax      ; 低16位L暂时存在bx
    mov ax, dx      ; 高16位H送到ax
    mov dx, 0
    div cx            ; H/N
    push ax         ; int(H/N)入栈
    mov ax, bx
    div cx            ; /N
    mov cx, dx      ; 余数送到cx
    pop dx            ; int(H/N)出栈
   
    pop bx
    ret

; 子程序show_str
show_str:
    push ax
    push bx
    push bp
    push cx
    push si
    push di
    push es
   
    mov bl, cl            ; 字体颜色存在bl中
    mov ax, 0b800H
    mov es, ax            ; 显示缓冲区的段地址存在es
    mov ax, 0a0H
    mul dh
    mov bp, ax            ; 将第n行的首地址存在bp
    mov ax, 2
    mul dl
    mov di, ax            ; 将第n列存在di
    mov si, 0
ctom:
    mov ch, 0
    mov cl,
    jcxz exit
    mov es:, cl
    inc di
    mov es:, bl
    inc si
    inc di
    jmp short ctom
exit:
    pop es
    pop di
    pop si
    pop cx
    pop bp
    pop bx
    pop ax
    ret
codesg ends

end start


**** Hidden Message *****

怡静 发表于 2013-8-5 01:14:43

强力支持楼主!

木叶客 发表于 2013-8-5 01:24:16

我是来看图的:big

镜花水月 发表于 2013-8-5 07:17:46

我是看见图片才点进来 的,进来了也不好意思不顶一下。:titter:

happyin3 发表于 2013-8-5 07:30:37

看图的。。

对迩,何止爱 发表于 2013-8-5 08:20:45

{:1_1:}强力支持楼主!

sejung 发表于 2013-8-5 09:04:12

看看什么东东?

84561475 发表于 2013-8-5 09:07:13

什么东西?????????????

欠你的幸福 发表于 2013-8-5 12:19:51

看着好深奥哟,,

seunqj 发表于 2013-9-11 21:31:10

太好了,这个代码我要好好研究一下

飞翔工作室 发表于 2013-9-12 17:08:27

好长啊,全是自己写的?

狂潮丶 发表于 2013-9-12 17:11:41

飞翔工作室 发表于 2013-9-12 17:08 static/image/common/back.gif
好长啊,全是自己写的?

额。有一定的水分。

陈培伟 发表于 2013-11-11 12:20:22

刚好做到这里 看看

生活! 发表于 2013-12-21 13:07:10

学习来了!

leilei9415 发表于 2013-12-21 13:55:46

汇编真是麻烦啊

坏得掉渣了 发表于 2013-12-21 13:59:57

这个应该就是一个软件程序吧

bboysea 发表于 2015-9-24 04:40:43

学习

xxkk14 发表于 2015-10-12 15:07:53

学习

lianhuo 发表于 2015-11-30 20:10:14

学习

z18832665515 发表于 2015-12-16 21:50:16

l
页: [1] 2 3
查看完整版本: Assembly language 课程设计1