在emu 8086中检查没有INT 21h的回文结构

时间:2016-11-27 21:38:56

标签: assembly x86-16 emu8086

我正在为我的计算机体系结构课程完成一项任务,而且我并不完全了解程序集。我应该从键盘输入一个字符串输入并检查它是否是回文。我不被允许使用INT 21h。我将程序编写为db string value而不是键盘输入,但我仍然无法使CMP正常工作。我很确定我做错了。希望有人可以提供帮助。

#make_COM#

include emu8086.inc


org 100h

jmp init       

  msg    db      "kayak",0          

init:
  Mov   SI,5
  mov   di,0
start: 

  mov  al,msg[si]
  dEC si
  inc di 

  mov  ah ,0eh
  int 10h  
  cmp si, -1
  jg start

check:

  mov al, msg[si]
  mov ah, msg[di]
  cmp al, ah
  jmp notpalin
  inc si
  dec di
  cmp si, 5
  jl check

palin:

  call pthis
  db "This is a palindrome", 0
  jmp stop

notpalin:

  call pthis
  db "This is not a palindrome", 0
  jmp stop

stop:
  mov     ah, 0 
  int     16h      ; wait for any key....
  ret ; return to operating system.

DEFINE_PTHIS

1 个答案:

答案 0 :(得分:3)

  • 您需要以4开始<ion-list id="page-list7" ng-show="VariableRadioToggle2"> <div ng-repeat="itemGrp in itemGroups"> <ion-item class="item-divider" id="page-list-item-divider32">{{itemGrp.name}}</ion-item> <ion-toggle name="{{itemGrp.name}}" ng-click="clickedVariableRadio2(portion.selected)" ng-repeat="(key,portion) in itemGrp.Portions" ng-model="itemGrp.selected_item" ng-true-value="'{{key}}'" ng-false-value="">{{portion.name}}</ion-toggle> </div> </ion-list>寄存器而不是5.使用数字5处理您不希望与BIOS电传打字功能一起显示的NULL字符。

  • 您的程序开始检查部分将包含-1的SI寄存器。这显然不是SI的正确记忆参考。

  • 比较2个字符时,需要使用条件跳转。你使用了一个总是跳跃的跳跃!

    mov al, msg[si]
  • 您可以在索引cmp al, ah jNE notpalin SI相互交叉后立即停止检查。

解决方案:

DI