惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
Jina AI
Jina AI
博客园_首页
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
Forbes - Security
Forbes - Security
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
N
News | PayPal Newsroom
S
Security Archives - TechRepublic
量子位
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
C
Cisco Blogs
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
Scott Helme
Scott Helme
S
Securelist
Security Latest
Security Latest
爱范儿
爱范儿
TaoSecurity Blog
TaoSecurity Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
L
LINUX DO - 最新话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
美团技术团队
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
月光博客
月光博客
T
Tailwind CSS Blog
Cloudbric
Cloudbric
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
Kaspersky official blog
D
DataBreaches.Net
博客园 - 【当耐特】
有赞技术团队
有赞技术团队

博客园 - IT 笔记

Subversion Revert File will not be shown in Modification Surprise vb.net WinForm don't require instance to access the instance value Properties.Settings show error 'System.Windows.Forms.PropertyStore' does not contain a definition for 'Settings' Add Image in MS Report RDLC by using Embedded Image 王爽汇编 Lab 13 Question 1, 用两个程序实现 Spring.NET Installation and setup the first program 王爽汇编语言 实验11 王爽汇编语言 检测点11.2 王爽 汇编语言程序设计实验10,题三,数值转换。(Assembly experiment Convert HEX to Decimal and Show on screen ) 王爽 汇编语言程序设计 实验9 (Assembly Language Study) 王爽 汇编语言程序设计 检测点9.1 第2题 The NTVDM CPU has encountered an illegal instruction. CS:0006 IP:130a .... select files by multiple extension name Access Denied when running Spring.IocQuickStart.MovieFinder using vb.net read unix style text file How to install autotrace in fontforge My first postscript program .net 2 config - IT 笔记 A generic winform skeleton support interactive UI during large job process
王爽 汇编语言程序课程设计1
IT 笔记 · 2011-11-03 · via 博客园 - IT 笔记

MOV SS, AX 改成 
DS 入栈 
 MOV DS, AX,  
 ... 
DS 出栈
 
就没有DEBUG问题了。看了网上解释是说DEBUG也需要用SS,所以会有这种问题。

还有就是进出子程序时,我觉得可以将所有的REGISTER入栈和出栈来保存栈内的值,这样比较容易也轻松很多。但是程序会稍微面一些,因为会将一些子程序没用到的REGISTER

data        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'  ; 4bytes per year 

    dd    16, 22, 382, 1356, 2390, 8000, 16000, 24486 ;4 bytes per number 

        dd           50065, 97479, 140417, 197514, 345980, 590827, 803530, 1183000    

    dd    1843000, 2759000, 3753000, 4649000, 5937000    

    dd    3, 7, 9, 13, 28, 38, 130, 220 

        dd    476, 778, 1001, 1442, 2258, 2793, 4037, 5635   

    dd    8226, 11542, 14430, 15257, 17800   

data    ends    

table    segment    

    ;db     'year summ n1 ?? '     

        ;db     'year summ n2 ?? '   

        ;db    19 dup ('year summ ne ?? ')    

        db 'Year'  ; Year 4 digits   [0-3] 

        dw  0      ; amont L                 [4-5]         

        dw  0      ; amont H         [6-7] 

        dw  0      ; people count    [8-9]  

        dw  0      ; averge          [10-11] 

        dw  0      ; filler          [12-13] 

        dw  0      ; filler          [14-15] 

        ;[16-17],[18-19],[20-21],[22-23],[24-25],[26-27],[28-29],[30-31]  

        dw 00,317ah,0000h,000Ah,0008h,0008h,0008h,0008h 

        ;[32],[33],[34],[35],[36],[37],[38],[39],[40],[41],[42],[43],[44],[45],[46],[47] 

        db 16 dup (0)  ;decimal output buffer 

        ;[48 - 55] 

        db 8 dup (' ')  ;year 

        ;[56 - 71] 

        db 16 dup (' ')  ;total amount 

        ;[72 - 87]  

        db 16 dup (' ')  ;Peope count 

        ;[88 - 103] 

        db 16 dup (' ')  ;average count 

        ;[104 - 107] 

        dw 00,00   ;function movCol parameters, 104 is source position, 106 is output position 

        ;[108] 

        dw 00   ;data segment pointer value, can be 0, 1 

        ;[110] 

        db 00   ;Display buffer pointer value 

table    ends 

code segment 

        start: mov ax, data 

        mov ds, ax  

        mov ax, table  

        mov es, ax 

        ;*********************使用LOOP 开始 

        mov cx, 21         

        mov es:[110], 0b800h  

        mov si, 0 

        mov ax, 0 

        shwNYr:          

                mov bx, es:[110] 

                add bx, 0Ah 

                mov es:[110], bx  

                mov es:[108], ax ; mov 0 to year data pointer   

                add ax, 4 

                Call shwYear   

        loop shwNYr ; 

        ;*********************使用LOOP 结束 

        ;*********************使用21次硬编码 开始  

        ; mov es:[110], 0b800h  ;0 ;1975 

        ; mov ax, 0 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear   

        ; mov es:[110], 0b80Ah   ;1 ;1976 

        ; mov ax, 4 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b814h   ;2  ;1977 

        ; mov ax, 8 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear   

        ; mov es:[110], 0b81Eh   ;3 ;1978 

        ; mov ax, 12 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b828h    ;4 ;1979 

        ; mov ax, 16 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b832h ;@60   5 ;1980 

        ; mov ax, 20 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b83Ch  ;@71  6 ;1981 

        ; mov ax, 24 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b846h  ;7 ;1982 

        ; mov ax, 28 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b850h   ;8 ;1983 

        ; mov ax, 32 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b85Ah ;9 ;1984 

        ; mov ax, 36 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b864h ; 10 ;1985 

        ; mov ax, 40 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b86Eh ; 11 ;1986 

        ; mov ax, 44 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b878h ; 12 1987 

        ; mov ax, 48 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b882h ; 13 1988 

        ; mov ax, 52 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b88Ch ; 14 1989 

        ; mov ax, 56 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b896h ; 15 1990 

        ; mov ax, 60 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b8A0h ; 16 1991 

        ; mov ax, 64 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b8AAh ; 17 

        ; mov ax, 68         

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b8B4h ; 18 

        ; mov ax, 72 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b8BEh ; 19 

        ; mov ax, 76 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b8C8h ;20 

        ; mov ax, 80 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear  

        ; mov es:[110], 0b8D2h ; 21 

        ; mov ax, 84 

        ; mov es:[108], ax ; mov 0 to year data pointer 

        ; Call shwYear 

        ;*********************使用21次硬编码 结束 

        mov ax, 4c00h 

        int 21h 

        ;*********************************************************** 

        ;******                   Show One Year's inform 

        shwYear: 

        push ax  

        push bx  

        push cx  

        push dx  

        ;push sp  

        push bp  

        push si  

        push di 

                mov si, es:[108]         ;year off set 

                ;mov ax, es:[si]          ;year off set 

                ;put year at line 18 db 'Year'  ; Year 4 digits 

                mov ax, ds:[si]          ;ds:[0] 

                mov es:[0], ax 

                mov ax, ds:[si+2]        ;ds:[2] 

                mov es:[2], ax 

                ;put amount 

                ;off set 21 year, 21 * 4= 84bytes 

                mov ax, ds:[si+84] ;ds:[84] ;ds:[84] = 16 

                mov es:[4], ax 

                mov ax, ds:[si+86] ;ds:[86] ;ds: 

                mov es:[6], ax 

                ;put people count 

                ;off set 21 numbers, 21 * 4= 84bytes 

                mov ax, ds:[si+168] ; ds:[168] 

                mov es:[8], ax 

                ;Now I got '31 39 37 35 10 00 00 00-03 00 00 00 00 00 00 00' 

                ;push bp 

                Call divDW  ;Compile Line @2D 

                ;pop bp 

                ;D 1966:0 f should be 

                ;'31 39 37 35 10 00 00 00-03 00 00 00 05 00 00 00'                 

                ;***********************  Move Year   ************************ 

                mov ax, es:[0]   ;Line 47 in exe 

                mov es:[48], ax  

                mov ax, es:[2]  

                mov es:[48+2], ax  

                ;D 1966:30 3f should be 

                ;'31 39 37 35 20 20 20 20-20 20 20 20 20 20 20 20' 

                ;***********************  Move Total Amount   ************************  

                mov ax, 4 

                mov es:[104], ax 

                mov ax, 56 

                mov es:[106], ax 

                ;push bp 

                Call MovCol   ;@5E  

                ;pop bp 

                ;D 1966:30 3f should be 

                ;'31 39 37 35 20 20 20 20-31 36 20 20 20 20 20 20'  

                ;push bp 

                CALL clnBuf 

                ;pop bp 

                ;***********************  Move People Amount   ************************   

                mov ax, 8 

                mov es:[104], ax 

                mov ax, 72 

                mov es:[106], ax 

                ;push bp 

                Call MovCol  ;@81  

                ;pop bp 

                ;D 1966:30 4f 

                ;'31 39 37 35 20 20 20 20-31 36 20 20 20 20 20 20' 

                ;'20 20 20 20 20 20 20 20-33 20 20 20 20 20 20 20'  

                ;push bp 

                CALL clnBuf 

                ;pop bp 

                ;**********************  Move average   *********************** 

                mov ax, 12 

                mov es:[104], ax 

                mov ax, 88 

                mov es:[106], ax 

                ;push bp 

                Call MovCol  ;@81  

                ;pop bp 

                ;D 1966:30 4f 

                ;'31 39 37 35 20 20 20 20-31 36 20 20 20 20 20 20' 

                ;'20 20 20 20 20 20 20 20-33 20 20 20 20 20 20 20'  

                ;push bp 

                CALL clnBuf                  

                ;pop bp                 

                ;mov string terminator 

                mov cx, 0  ;@11B 

                mov es:[93], cx 

                ;D 1966:30 5f 

                ;'31 39 37 35 20 20 20 20-31 36 20 20 20 20 20 20' 

                ;'20 20 20 20 20 20 20 20-33 20 20 20 20 20 20 20'  

                ;'20 20 20 20 20 20 20 20-35 20 20 20 20 20 20 00'  

                MOV ax, es:[110] ;0b800h 

                ;push bp 

                Call Show_str   ;@123  

                ;pop bp 

        pop di  

        pop si  

        pop bp  

        ;pop sp 

        pop dx  

        pop cx  

        pop bx  

        pop ax 

        ret 

        ;*********************************************************** 

        ;******                   Move Column 

        movCol: 

        ;pop bp  

                push ax  

                push bx  

                push cx  

                push dx  

                ;push sp 

                push bp  

                push si  

                push di 

                mov si, es:[104] 

                mov ax, es:[si] 

                mov es:[18], ax      ; 4240   Divident(L) 

                mov ax, es:[si+2] 

                mov es:[20], ax      ; 000f   Divident(H) 

                mov si, 46  

                push bp 

                Call ToAsc   ;@11C 

                pop bp 

                mov cx, 8 

                mov bx, 0  

                mov si, 0 

                movAsc4:         

                PUSH cx 

                mov cx, es:[31+si] 

                ADD si, 2 

                jcxz skpEmp4  

                        mov ax, table  

                        mov es, ax 

                        push si 

                        mov si, es:[106] 

                        mov es:[si+bx], ch 

                        pop si 

                        ADD bx, 1 

                skpEmp4: 

                pop cx  

                loop movAsc4 ; 

        pop di  

        pop si  

        pop bp  

        ;pop sp 

        pop dx  

        pop cx  

        pop bx  

        pop ax 

        ;push bp  ;@147 

        ret 

        ;*********************************************************** 

        ;******                   Show Text 

        show_str: 

        ;pop bp   ;@F6 

        push ax  

        push bx  

        push cx  

        push dx  

        ;push sp 

        push bp  

        push si  

        push di 

        push ss     

push ds

                ;mov ax, 0b86eh 

                mov ax, es:[110] 

                mov ds, ax      ;row 

                mov si, 08      ;Column,  control left or right on screen 

                mov bx, 0       ;String stard postion 

                mov ah, 00000010B ;Font  

        main:                          

                mov cl, es:[bx+48]   ; ds:[bx] is the character @109 

                mov al, ' ' 

                mov es:[bx+48],  al ; reset the ascii to empty 

                mov al, cl   

                mov ch, 0 

                jcxz EXIT_SS         ;@110 

                mov ds:[si], ax      ; this  ss:[si+bx] is character position         

                inc bx  

                add si, 2 

        jmp short main           ;@119 

        EXIT_SS: 

pop ds

        pop ss         

        pop di  

        pop si  

        pop bp  

        ;pop sp 

        pop dx  

        pop cx  

        pop bx  

        pop ax 

        ret  

        ;*******************divDW************************ 

        ;|    |  |  |  |  |  |  | 

        ;0    4  6  8  10 12 14 

        ;0 - year 

        ;4 - revenue LOW 

        ;6 - revennue HIGH 

        ;8 - People 

        ;10 - Average 

        ;12 - Not in use 

        ;14        - Not in use 

        ;For example input is 

        ;31 39 37 35 10 00 00 00-03 00 00 00 00 00 00 00' 

        ;then output should be 

        ;31 39 37 35 10 00 00 00-03 00 00 00 05 00 00 00' 

        ; db 'Year'  ; Year 4 digits   [0-3] 

        ; dw  0      ; amont L                 [4-5]         

        ; dw  0      ; amont H         [6-7] 

        ; dw  0      ; people count    [8-9]  

        ; dw  4      ; averge          [10-11] 

        ; dw  4      ; filler          [12-13] 

        ; dw  4      ; filler          [14-15] 

        divDW:  ;chapter: 8.7  Page 157  

        push ax  

        push bx  

        push cx  

        push dx  

        ;push sp 

        push bp  

        push si  

        push di  

                MOV BX, es:[4] ;4240 Divident(L)                         ;Compile Line 5E   @FD 

                MOV AX ,es:[6] ; 000f   Divident(H) 

                MOV CX ,es:[8] ; 000A     Divisor 

                MOV DX, 0                 

                DIV CX     ; (DX(0) + AX(000f)) / CX 

                mov es:[14], ax 

                MOV AX, BX ; move Divident (L) in AX 

                DIV CX     ; (DX(0005) + AX (4240)) / CX 

                mov es:[12], ax  

                ;mov es:[0], dx 

        pop di  

        pop si  

        pop bp  

        ;pop sp 

        pop dx  

        pop cx  

        pop bx  

        pop ax 

        ret  ;@11D 

        ;*******************To Ascii************************ 

        ;|  |  |  |  |  |  |  | 

        ;0  2  4  6  8  10 12 14 

    ;0 - remainder 

        ;2 - Divident LOW 

        ;4 - Divident HIGH 

        ;6 - TEN 

        ;8 - NOT IN USE 

        ;dw 00,4240h,000fh,000Ah,0008h,0008h,0008h,0008h 

        ;PUT the output to 32-47 position 

        ; 

        ToAsc:  ;chapter: 8.7  Page 157 @1A8 

        push ax  

        push bx  

        push cx  

        push dx  

        ;push sp 

        push bp  

        push si  

        push di 

        ToAsc_m:           

                MOV BX, es:[18] ; 4240   Divident(L)                          

                MOV AX ,es:[20] ; 000f   Divident(H) 

                MOV CX ,es:[22] ; 000A   Divisor 

                MOV DX, 0                ;@12E 

                DIV CX     ; (DX(0) + AX(000f)) / CX 

                mov es:[20], ax 

                MOV AX, BX ; move Divident (L) in AX 

                DIV CX     ; (DX(0005) + AX (4240)) / CX 

                mov es:[18], ax  

                mov es:[16], dx 

                mov cx, es:[16]  ; set remaider in cx 

                add cx, 30h      ; add decimal ascii  

                mov es:[si], cx 

                SUB si, 2 

                mov ax, es:[18]  ; using bit OR to merge Divident H to Divident Low 

                OR ax, es:[20]        ; Divident H is ds:[4], Divident L is ds:[2] 

                MOV cx, ax                ; Then check whether ds:[2] is 0 or not 

                jcxz EXIT_TA ;exit_toAsicc ;@1E7 

        jmp ToAsc_m 

        EXIT_TA:  

        pop di  

        pop si  

        pop bp  

        ;pop sp 

        pop dx  

        pop cx  

        pop bx  

        pop ax 

        ret 

        ;*********************************************************** 

        ;******                   clean buffer 

        clnbuf:  

        push ax  

        push bx  

        push cx  

        push dx  

        ;push sp 

        push bp  

        push si  

        push di 

                mov cx, 8       ;@61 

                mov bx, 0   

                reset:  

                MOV ax, 0 

                mov es:[32+bx], ax 

                ADD bx, 2  

                loop reset  

        pop di  

        pop si  

        pop bp  

        ;pop sp 

        pop dx  

        pop cx  

        pop bx  

        pop ax 

        ret 

code ends 

end start