【学习笔记】汇编学习时 遇到的一道难题,且最后并没有解出来

该题需要把 21个 年份year 收入sume 公司人数ne 以及平均收入?? 存放至TABLE段的 'YEAR SUME NE ?? '中 对应存储

不允许使用变量命名

(话说看上去这么简单的题汇编做起来怎么就这么难呢)

最终钻研了一小时得到这么个程序 最后有一点小瑕疵 没能将SUME NE ??这三个段从 16进制转化成可读的ASCII码(大失败)

DATAS 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'
    ;year
    dd 11542,11542,11542,11542,11542,11542,11542,11542,11542,11542
    dd 11542,11542,11542,11542,11542,11542,11542,11542,11542,11542,11542
    ;sume
    dw 456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456
    dw 456,456,456,456
    ;ne
DATAS ENDS

TABLE SEGMENT 
	DB 21 DUP('YEAR SUME NE ?? ')
TABLE ENDS

STACKS SEGMENT
    DB 128 DUP(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:TABLE
START:

    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    MOV AX,TABLE
    MOV ES,AX
    
   	MOV CX,21
   	MOV SI,0
changeWord:
		PUSH CX
		
		MOV DI,SI			;取year这里year应该是4位一个,这里应该按照4位的方式,拆成两个放
		ADD DI,DI			;di=si*2
		ADD DI,DI			;di=si*4
		MOV CX,DS:[DI]
		MOV AX,DS:[DI+2]
		ADD DI,DI			;di=si*8
		ADD DI,DI			;di=si*16
		MOV ES:[DI],CX		;es:di = 077E:si*16
		MOV ES:[DI+2],AX	;es:di = 077E:si*16+2
		
		MOV DI,SI			;取sume这里sume是4位一个
		ADD DI,DI			;di=si*2
		ADD DI,DI			;di=si*4
		MOV AX,DS:[DI+84]	;开始的year 4位一个,所以开始占用了84个位置
		MOV CX,AX			
		;ADD CX,30H			;转ascii
		MOV DX,DS:[DI+86]	;取高位+2
		
		ADD DI,DI			;di=si*8
		ADD DI,DI			;di=si*16即一排
		MOV ES:[DI+7],CX	;es:[di+7]=0770:si*16+7即第si行的第七个位置
		MOV CX,DX			;因为cx是取的sume的低位 所以放在后面
		;ADD CX,30H			;这里把sume的高位转ascii
		MOV ES:[DI+5],CX	;并放入字符串高位
		
		MOV DI,SI
		ADD DI,DI			;di=si*2	最后的ne是两位一个
		MOV BX,DS:[DI+84+84];这里的84+84是指year与sume所占用的位置
		MOV CX,BX			;同理把ne拿出来
		;ADD CX,30H			;转ascii
		ADD DI,DI
		ADD DI,DI			;di=si*8
		ADD DI,DI			;di=si*16
		MOV ES:[DI+10],CX	;并把ascii放入第10位(ne)
		
		DIV BX				;做除法 求得??的数值
		
		MOV ES:[DI+13],AX	;把最终的商放进第13位??的位置
		
		inc SI				
		
		POP CX				;把cx从栈中拿出 继续循环
    loop changeWord
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START


这里最终的后面那一串就分别对应了SUME NE以及?? 不知道怎么转成ASCII来显示

放弃ing

猜你喜欢

转载自blog.csdn.net/h2809871142/article/details/79344372
今日推荐