2017-09-29 8 views
-5

申し訳ありません申し訳ありませんが、技術用語に対して弱いhahahaは助けてください!約5つの文字列操作またはここに追加することができるatleast操作を追加します。私のアセンブリ言語用の追加の文字列操作が必要tasm tlink

Data Segment 
chc db 0dh,0ah,"Choose Operation: $" 
chc1 db 0dh,0ah," 1. Accept String $" 
chc2 db 0dh,0ah," 2. Display String $" 
chc3 db 0dh,0ah," 3. Display Length $" 
chc4 db 0dh,0ah," 4. Display Reverse $" 
chc5 db 0dh,0ah," 5. Check Palindrome $" 
chc6 db 0dh,0ah," 6. Exit $" 
len db ? 
msg db 0dh,0ah,"Please enter the String: $" 
msg1 db 0dh,0ah,"The length of the entered String is: $" 
msg2 db 0dh,0ah,"The entered String is: $" 
msg3 db 0dh,0ah,"The reverse of the entered String is: $" 
pal db 0dh,0ah,"The String is a Palindrome. $" 
npal db 0dh,0ah,"The String is not a Palindrome. $" 
newl db 0dh,0ah," $" 
Data ends 
Code Segment 
assume DS:Data,CS:Code 
Start: 
mov ax,Data 
mov DS,ax 

call AcceptString 

l: mov dx,offset chc 
mov ah,09h 
int 21h 
mov dx,offset chc1 
mov ah,09h 
int 21h 
mov dx,offset chc2 
mov ah,09h 
int 21h 
mov dx,offset chc3 
mov ah,09h 
int 21h 
mov dx,offset chc4 
mov ah,09h 
int 21h 
mov dx,offset chc5 
mov ah,09h 
int 21h 
mov dx,offset chc6 
mov ah,09h 
int 21h 

mov dx,offset newl 
mov ah,09h 
int 21h 

mov ah,01h 
int 21h 
sub al,30h 

cmp al,06h 
jz ex 

cmp al,05h 
jne n1 
call CheckPal 

n1: cmp al,04h 
jne n2 
call DisplayRev 

n2: cmp al,03h 
jne n3 
call DisplayLength 

n3: cmp al,02h 
jne n4 
call DisplayString 

n4: cmp al,01h 
jne l 
call AcceptString 
jmp l 

ex: mov ah,4ch 
int 21h 
AcceptString proc 
mov si,1000h 
mov di,1000h 
mov cx,0000h 

mov dx,offset msg 
mov ah,09h 
int 21h 

    back: 
mov ah,01h 
int 21h 

cmp al,0dh 
je comp 
inc cx 
mov [si],al 
mov [di],al 
inc si 
inc di 
jmp back 
comp: mov len,cl 
ret 
endp 
DisplayString proc 
mov dx,offset msg2 
mov ah,09h 
int 21h 

mov cl,len 
mov ch,00h 
mov si,1000h 

    disp: 
mov dl,[si] 
mov ah,02h 
int 21h 

inc si 
loop disp 
ret 
endp 
DisplayLength proc 
mov dx,offset msg1 
mov ah,09h 
int 21h 

mov bl,len 
call DispNum 
ret 
endp 
DispNum proc 
mov al,bl 
and al,0f0h 
ror al,1 

mov dl,al 
call HexDisp 
mov ah,02h 
int 21h 

mov al,bl 
and al,0fh 

mov dl,al 
call HexDisp 
mov ah,02h 
int 21h 
endp 
HexDisp proc 
cmp dl,0ah 
jc nothex 
add dl,07h 
nothex: add dl,30h 
ret 
endp 
DisplayRev proc 
mov dx,offset msg3 
mov ah,09h 
int 21h 

mov cl,len 
mov ch,00h 
mov si,1000h 
add si,cx 
dec si 

    dispr: 
mov dl,[si] 
mov ah,02h 
int 21h 

dec si 
loop dispr 
ret 
endp 
CheckPal proc 
mov al,len 
mov ah,00h 
mov bl,02h 
div bl 
mov cl,len 
dec cl 
mov ch,00h 
mov di,1000h 
mov si,1000h 
add di,cx 
mov cl,al 
mov ch,00h 

    pchk: 
mov al,[si] 
cmp al,[di] 
jnz np 
inc si 
dec di 
loop pchk 

mov dx,offset pal 
mov ah,09h 
int 21h 
ret 

     np: 
mov dx,offset npal 
mov ah,09h 
int 21h 
ret 
endp 
Code ends 
end Start 
+2

投稿した内容が正しくフォーマットされているかどうかを確認してください。 "コピー貼り付けて忘れる"態度を避けてください。とにかく、あなたの投稿は質問を見逃しているようです。 –

+0

あなたのコードをすばやく読んでから、経験豊富な講師もあなたのコードを見直し、そこにあるすべてのバグを指摘し、それを拡張してから修正する必要があります。あなたのコードに重大な誤解があります。うまくいけば、それは幸運な偶然のようなものです。 – Ped7g

答えて

1

あなたはメニューに5より多くのオプションが必要な場合は、これらのための例の書き込みコード用CAN:ALL-CAPSで

  • 表示文字列
  • 逆キャップ( "こんにちは" と表示文字列 - 冒頭に削除空白と>「HELLO」)
  • 表示文字列(「ハイジャック!」 - - >「!ハイジャック」)
  • 文字列が有効な整数値であるかどうかを表示(有効な文字は、「+」またはだけです「」 、次に数字だけで手紙の少なくとも一つの存在桁)
  • 表示回数すべての文字と「」の文字列で
  • 表示文字列は「」すべての文字で
  • 表示文字列を削除「aeiouyは」になって「 - 」(便利かもしれあなたは、コード「絞首刑」ゲーム)

を文字列で

  • ROT13 "encryption"
  • カウント文字/ワード/改行にしようとするときそして、あなたはやや大きな挑戦をしたい場合は、たとえばで発生するすべての単語が表示される場合がありより多くの文字列「文字をパレットにする」のように、一度(サブ文字列として)も。 - > "Let:letters、palette"を入力します。 (前のものはかなり簡単ですが、これは簡単なもののうちの4~10のようにもっと努力するでしょう)

  • 関連する問題